dcast 从宽到长

dcast from wide to long

这应该很容易,但我找不到正确的方法。

jk <- data.frame(j=c("a","b","a","b"),val=c(1,3,2,1))

我想 dcast 到 return 两列 a 和 b,分别带有 {1,2} 和 {3,1}。

base R中,我们可以使用unstack

unstack(jk, val ~ j)

-输出

#  a b
#1 1 3
#2 2 1

如果我们使用 dcast,请创建一个序列列,因为 'j'

有重复项
library(data.table)
dcast(setDT(jk), rowid(j) ~ j, value.var = 'val')[, j := NULL][]

-输出

#  a b
#1: 1 3
#2: 2 1