我有一个数据框,其中包含按类型和频率分类的名称。我想扩展这个数据框,以便根据名称类型的频率重复这些名称。 例如,这个:
> df = data.frame(name=c('a','b','c'),type=c(0,1,2),freq=c(2,3,2))
name type freq
1 a 0 2
2 b 1 3
3 c 2 2
会变成这样:
> df_exp
name type
1 a 0
2 a 0
3 b 1
4 b 1
5 b 1
6 c 2
7 c 2
以简单的方式欣赏任何建议。
答案 0 :(得分:3)
您可以使用rep
“展开”data.frame
行:
df[rep(sequence(nrow(df)), df$freq), c("name", "type")]
# name type
# 1 a 0
# 1.1 a 0
# 2 b 1
# 2.1 b 1
# 2.2 b 1
# 3 c 2
# 3.1 c 2
splitstackshape 包中有一个函数expandRows
就是这样做的。它还可以选择接受一个向量,指定复制每一行的次数,例如:
expandRows(df, "freq")