通过相同数据帧中的freq值复制数据帧行

时间:2014-03-24 06:25:32

标签: r dataframe

我有一个数据框,其中包含按类型和频率分类的名称。我想扩展这个数据框,以便根据名称类型的频率重复这些名称。 例如,这个:

> 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

以简单的方式欣赏任何建议。

1 个答案:

答案 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")