3

我有一个df带有字段的数据框countvalue并且希望将其转换为一个数据框,value其中的每个值value都重复count多次。

除了循环之外,我实际上不知道如何做到这一点。涉及plyrreshape2(或两者)的解决方案是完全可以接受的。

这是我正在寻找的示例:

count value
2     10
1     20

value
10
10
20

后续问题

如果我有 3 个value1, value2, value3必须基于 重复的字段count怎么办?

4

2 回答 2

13

如果您的数据框被命名为 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
于 2013-08-03T01:25:19.770 回答
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就是这样,您正在使用的值列的数量。不过,这会返回一个矩阵。因此,如果矩阵有问题,您必须小心。

于 2013-08-03T01:41:57.620 回答