将值列扩展为分类数据

Expand value column into categorical data

我有这个 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 的操作,但我认为这里没有此选项。

您可以通过 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

我们可以使用 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