为了账号安全,请及时绑定邮箱和手机立即绑定

复制每一行数据.帧,并指定每一行的复制数量

复制每一行数据.帧,并指定每一行的复制数量

慕雪6442864 2019-06-03 15:11:08
复制每一行数据.帧,并指定每一行的复制数量df <- data.frame(var1=c('a', 'b', 'c'), var2=c('d', 'e', 'f'), freq=1:3)最简单的方法是展开上面data.framework的前两列,以便每行显示列‘freq’中指定的次数?换句话说,从这一点出发:df  var1 var2 freq1    a    d    12    b    e    23    c    f    3对此:df.expanded  var1 var21    a    d2    b    e3    b    e4    c    f5    c    f6    c    f
查看完整描述

4 回答

?
犯罪嫌疑人X

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


查看完整回答
反对 回复 2019-06-03
?
慕尼黑5688855

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


查看完整回答
反对 回复 2019-06-03
?
莫回无

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


查看完整回答
反对 回复 2019-06-03
?
冉冉说

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"]


查看完整回答
反对 回复 2019-06-03
  • 4 回答
  • 0 关注
  • 948 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信