我在R
上做得很轻松,可以将因子级别转换为列名。
让tmp
为data.frame:
tmp <- data.frame(x=gl(2,3, labels=letters[24:25]),
y=gl(3,1,6, labels=letters[1:3]),
z=c(1,2,3,3,3,2))
> tmp
x y z
1 x a 1
2 x b 2
3 x c 3
4 y a 3
5 y b 3
6 y c 2
我的目的是使y
列中的级别成为列名,并将1放入对应的列中,如下所示:
x y z a b c
x a 1 1 0 0
x b 2 0 1 0
x c 3 0 0 1
y a 3 1 0 0
y b 3 0 1 0
y c 2 0 0 1
请注意,我需要的与R软件包dcast
和spread
中的reshape2
或tidyr
函数不同
答案 0 :(得分:2)
我们可以使用mtabulate
中的qdapTools
cbind(tmp, qdapTools::mtabulate(tmp$y))
# x y z a b c
#1 x a 1 1 0 0
#2 x b 2 0 1 0
#3 x c 3 0 0 1
#4 y a 3 1 0 0
#5 y b 3 0 1 0
#6 y c 2 0 0 1
或者cSplit_e
中的splitstackshape
splitstackshape::cSplit_e(tmp, "y", type = "character", fill = 0)