基于R中的字段重复行

时间:2013-08-03 01:21:09

标签: r dataframe

我的数据框df包含字段countvalue,并希望将其转换为列value的数据框,其中每个值为{{ 1}}重复value次。

我实际上并不知道如何在循环中执行此操作。涉及countplyr(或两者)的解决方案完全可以接受。

这是我正在寻找的一个例子:

reshape2

count value
2     10
1     20

后续问题

如果根据value 10 10 20 我必须重复3个字段value1, value2, value3该怎么办?

2 个答案:

答案 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就是您正在使用的值列数。但是,这会返回一个矩阵。因此,如果矩阵有问题,你必须要小心。