【问题标题】:Expand value column into categorical data [duplicate]将值列扩展为分类数据[重复]
【发布时间】:2017-07-23 00:49:34
【问题描述】:

我有这个data.frame,ff:

ff<-data.frame(dest = c("NY", "NY", "LA", "LA"), 
st_ti = c("ok", "bad", "ok",   "bad"), 
qty = c(2,2,2,1))

ff:

 dest st_ti qty
1   NY    ok   2
2   NY   bad   2
3   LA    ok   2
4   LA   bad   1

我想扩展,所以它都是分类数据,像这样:

gg<-data.frame(dest = c("NY", "NY", "NY", "NY", "LA", "LA","LA"), 
st_ti = c("ok", "ok", "bad", "bad", "ok", "ok", "bad"))

gg:

  dest st_ti
1   NY    ok
2   NY    ok
3   NY   bad
4   NY   bad
5   LA    ok
6   LA    ok
7   LA   bad

我想从tidyr 包中执行类似gather 的操作,但我不相信此选项可用,请点击此处。

【问题讨论】:

    标签: r tidyr


    【解决方案1】:

    我们可以使用expandRows 来做到这一点

    library(splitstackshape)
    setDT(expandRows(ff, 'qty'))[]
    #   dest st_ti
    #1:   NY    ok
    #2:   NY    ok
    #3:   NY   bad
    #4:   NY   bad
    #5:   LA    ok
    #6:   LA    ok
    #7:   LA   bad
    

    【讨论】:

      【解决方案2】:

      您可以通过 qty 列重复行名称,然后选择具有扩展行名称的行:

      ff[rep(rownames(ff), ff$qty), c("dest", "st_ti")]
      
      #    dest st_ti
      #1     NY    ok
      #1.1   NY    ok
      #2     NY   bad
      #2.1   NY   bad
      #3     LA    ok
      #3.1   LA    ok
      #4     LA   bad
      

      要重置行名:

      ff1 <- ff[rep(rownames(ff), ff$qty), c("dest", "st_ti")]
      rownames(ff1) <- NULL
      ff1
      
      #  dest st_ti
      #1   NY    ok
      #2   NY    ok
      #3   NY   bad
      #4   NY   bad
      #5   LA    ok
      #6   LA    ok
      #7   LA   bad
      

      【讨论】:

      • 在rep.data.frame 上搜索一无所获。这符合我的预期。
      • @42- 感谢您的评论!显然,R 不允许重复的行名。
      • 添加更多列容易吗?好像有 st_ti1、st_ti2、..st_tin 等也会因为这次扩展而重复?
      • 您可以这样做,ff[rep(rownames(ff), ff$qty), -3] 其中 3 是列位置,或者 ff[rep(rownames(ff), ff$qty), ] 然后稍后删除 qty 列。 ff[rep(rownames(ff), ff$qty), names(ff) != "qty"] 是一种选择。
      • 明白 - 谢谢!
      猜你喜欢
      • 2019-06-18
      • 2021-02-02
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      相关资源
      最近更新 更多