使用rep()将因子插入数据框的列

时间:2014-03-14 20:26:32

标签: r

我试图在数据框中为每个观察添加因子。特别是,我有一个名为test的数据框,有7列和100行。我把它初始化为:

test<-as.data.frame(matrix(ncol=7,nrow=100))
> names(test1)
[1] "V1" "V2" "V3" "V4" "V5" "V6" "V7"

我想插入因素&#34;雇用&#34;,&#34;失业&#34;,&#34;失业&#34;力&#34;在V1列中分别重复65次,20次,15次。我尝试使用&#34;雇用&#34;:

test$V1<-rep("Employed", time=65)
Error in `$<-.data.frame`(`*tmp*`, "V1", value = c("Employed", "Employed",  : 
replacement has 65 rows, data has 100

正如您所看到的,我收到了错误消息。我正在寻找一个快速简单的解决方案。谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

test$V1 <- c(rep("Employed", time=65), rep("Unemployed", 20), rep("Out of Labor", 15))

答案 1 :(得分:2)

您可以使用times中的rep参数来说明重复每个值的次数。然后,您需要factor来实际创建一个因子。否则它只是一个字符串向量。

> test$V1 <- factor( rep(c("Employed", "Unemployed", "Out of labor"),
                         times=c(65,20,15)) )
> table(test$V1)
Employed Out of labor   Unemployed 
      65           15           20

您可以看到使用factor与使用此代码之间的区别:

> rep(c("A","B","C"), 2)
[1] "A" "B" "C" "A" "B" "C"
> factor(rep(c("A","B","C"), 2))
[1] A B C A B C
Levels: A B C

请注意,在第一种情况下,我们没有因子而是字符串向量。

答案 2 :(得分:2)

您也可以使用replicate代替rep。然后as.factor创建因子并将class从字符转换为因子。

> f <- c("Employed", "Unemployed", "Out of labor force")
> test$V1 <- unlist(mapply(replicate, c(65, 20, 15), as.factor(f)))