在不更改数据结构的情况下将因子级别转换为列名称。frame

时间:2019-10-01 10:52:47

标签: r dataframe

我在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软件包dcastspread中的reshape2tidyr函数不同

1 个答案:

答案 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)