首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >按列中指定的次数重复data.frame的每一行

按列中指定的次数重复data.frame的每一行
EN

Stack Overflow用户
提问于 2010-05-24 12:46:12
回答 6查看 109.3K关注 0票数 178
df <- data.frame(var1 = c('a', 'b', 'c'), var2 = c('d', 'e', 'f'),
                 freq = 1:3)

将上述data.frame的前两列展开每行,使每行重复'freq‘列中指定的次数,最简单的方法是什么?

换句话说,从这个开始:

df
  var1 var2 freq
1    a    d    1
2    b    e    2
3    c    f    3

要这样做:

df.expanded
  var1 var2
1    a    d
2    b    e
3    b    e
4    c    f
5    c    f
6    c    f
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-05-24 13:01:20

这里有一个解决方案:

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
票数 191
EN

Stack Overflow用户

发布于 2018-02-02 05:12:03

旧问题,tidyverse中的新动词:

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
票数 87
EN

Stack Overflow用户

发布于 2014-12-12 07:01:09

@neilfws的解决方案适用于data.frames,但不适用于data.tables,因为它们缺少row.names属性。这种方法适用于以下两种情况:

df.expanded <- df[rep(seq(nrow(df)), df$freq), 1:2]

data.table的代码稍微干净了一点:

# convert to data.table by reference
setDT(df)
df.expanded <- df[rep(seq(.N), freq), !"freq"]
票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2894775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档