1

以下命令

     region <- gl(6,2,24, label=c("ag", "cb", "cx", "ec", "hp", "mb"))

通过以下方式创建一个因子

     structure(c(1L, 1L, 2L, 2L, 2L, 3L, 4L, 4L, 5L, 5L, 6L, 6L, 1L, 
      1L, 2L, 2L, 3L, 3L, 4L, 4L, 5L, 5L, 6L, 6L), .Label = c("ag", 
     "cb", "cx", "ec", "hp", "mb"), class = "factor")

但是当我尝试为不同数量的复制创建它时,它会出错。例如,当 ag 和 cb 是三个重复时,我需要这样的东西

     structure(c(1L, 1L,1L, 2L, 2L, 2L, 2L, 3L, 4L, 4L, 5L, 5L, 6L, 6L, 1L, 
      1L, 2L, 2L, 3L, 3L, 4L, 4L, 5L, 5L, 6L, 6L), .Label = c("ag", 
     "cb", "cx", "ec", "hp", "mb"), class = "factor")

如何编写命令

       region <- gl(6,2,24, label=c("ag", "cb", "cx", "ec", "hp", "mb")) now?
4

4 回答 4

1

gl只是rep.int. 你可以自己打电话给代表

l <- c("ag", "cb", "cx", "ec", "hp", "mb")
# I will presume you want the output to now be length 28 to account
# for the extra replications in the first two levels
 factor(rep_len(rep.int(l, times = rep.int(c(3,2), c(2,4))),28))
 ## [1] ag ag ag cb cb cb cx cx ec ec hp hp mb mb 
 ## [14] ag ag ag cb cb cb cx cx ec ec hp hp mb mb
 ## Levels: ag cb cx ec hp mb
于 2013-05-02T11:46:27.453 回答
0

认为,如果我正确理解了您想要的输出,您可能需要在使用rep. 无论如何,这就是gl用来制作因子的:

region <- rep( c( rep( c( "ag" , "cb" ) , each = 3 )  , rep ( c( "cx", "ec", "hp", "mb" ) , each = 2 ) ) , times = 2 )
region <- as.factor( region )
region
# [1] ag ag ag cb cb cb cx cx ec ec hp hp mb mb ag ag ag cb cb cb cx cx ec ec hp hp mb mb
# Levels: ag cb cx ec hp mb
于 2013-05-02T11:46:37.160 回答
0

你需要按那个确切的顺序吗?如果没有,这将起作用:

factor(rep(c('ag', 'cb', 'cx', 'ex', 'hp', 'mb'), times=c(5, 6, 3, 4, 4, 4)))

如果顺序很重要,那么调整代码应该很容易。

于 2013-05-02T11:45:03.740 回答
0

我将创建一个具有正确复制的数字向量,使用rep然后通过指定标签将其转换为因子。

vector <- c(rep(1:2, each=3), rep(3:6, each=2))

region <- factor(vector,
                 levels=1:6,
                 labels=c("ag", "cb", "cx", "ec", "hp", "mb"))
于 2013-05-02T11:47:49.777 回答