4 回答
TA贡献2080条经验 获得超4个赞
这里有一个解决方案:
df.expanded <- df[rep(row.names(df), df$freq), 1:2]
结果:
var1 var2
1 a d
2 b e
2.1 b e
3 c f
3.1 c f
3.2 c f
TA贡献1848条经验 获得超2个赞
使用expandRows()从splitstackshape一揽子:
library(splitstackshape)
expandRows(df, "freq")
简单的语法,非常快,工作在data.frame或data.table.
结果:
var1 var2
1 a d
2 b e
2.1 b e
3 c f
3.1 c f
3.2 c f
TA贡献1865条经验 获得超7个赞
旧疑问句中的新动词:
library(tidyr) # version >= 0.8.0
df <- data.frame(var1=c('a', 'b', 'c'), var2=c('d', 'e', 'f'), freq=1:3)
df %>%
uncount(freq)
var1 var2
1 a d
2 b e
2.1 b e
3 c f
3.1 c f
3.2 c f
TA贡献1877条经验 获得超1个赞
不是为了data.table
因为他们缺少row.names
财产。这种方法适用于以下两种情况:
df.expanded <- df[rep(seq(nrow(df)), df$freq), 1:2]
密码data.table
是一点清洁剂:
# convert to data.table by referencesetDT(df)df.expanded <- df[rep(seq(.N), freq), !"freq"]
- 4 回答
- 0 关注
- 948 浏览
添加回答
举报