我的数据框df
包含字段count
和value
,并希望将其转换为列value
的数据框,其中每个值为{{ 1}}重复value
次。
我实际上并不知道如何在循环中执行此操作。涉及count
或plyr
(或两者)的解决方案完全可以接受。
这是我正在寻找的一个例子:
reshape2
到
count value
2 10
1 20
后续问题
如果根据value
10
10
20
我必须重复3个字段value1, value2, value3
该怎么办?
答案 0 :(得分:11)
如果您的数据框名为dat,则可以使用:
dat[rep(seq_len(dim(dat)[1]), dat$count), 2]
## [1] 10 10 20
如果您希望将其作为数据框,就像您发布的那样:
data.frame(dat[rep(seq_len(dim(dat)[1]), dat$count), 2, drop = FALSE], row.names=NULL)
## value
## 1 10
## 2 10
## 3 20
答案 1 :(得分:3)
这是一个mapply
解决方案,假设您的数据框名为dat
:
do.call("c", (mapply(rep, dat$value, dat$count)))
如果您有多个值列,可以尝试
v <- do.call("c", (mapply(rep, c(dat$value1, dat$value2, dat$value3), dat$count)))
t(matrix(v, numberofvaluecolumns, byrow=T))
numberofvaluecolumns
就是您正在使用的值列数。但是,这会返回一个矩阵。因此,如果矩阵有问题,你必须要小心。