将不同列中的相同因子级别移动到R中的相同列中

时间:2018-02-05 17:29:58

标签: r dataframe reshape levels

我有一个包含不同变量的数据框,可以共享一些因子级别:

      id     tag_1      tag_2      tag_3
1:    3      human      NA         artist
2:    5      human      NA         NA
3:    7      song       artist     human
4:    8      town       human      NA   

正如你所看到的,"人类"级别存在于三个不同的变量(tag_1,tag_2和tag_3)和级别"艺术家"在两个变量(tag_2和tag_3)中。

知道每个因子级别在给定行中是唯一的,我想将相同的级别分组到同一列中,以便在每列中具有独占因子级别:

      id     tag_1      tag_2      tag_3
1:    3      human      NA         artist
2:    5      human      NA         NA
3:    7      human      song       artist
4:    8      human      town       NA  

有没有办法这样做?

如果没有,那么替代方法是按出现次数排序每一行的水平(在所有数据帧中出现)......

感谢您的任何好主意!

1 个答案:

答案 0 :(得分:0)

我会做这样的事情:

join -1 2 -2 2 a.luc b.luc
> new 1 3
> old 4 2

从那里,如果你真的需要它们是'tag_number'格式,那么很容易重命名列。

或者,只需创建二进制指示符:

library(data.table)
melt(setDT(mydf), "id", na.rm = TRUE)[
  , dcast(.SD, id ~ value, value.var = "value")]
#    id artist human song town
# 1:  3 artist human   NA   NA
# 2:  5     NA human   NA   NA
# 3:  7 artist human song   NA
# 4:  8     NA human   NA town

“tidyverse”中的相似之处是:

melt(setDT(mydf), "id", na.rm = TRUE)[
  , dcast(.SD, id ~ value, value.var = "variable", fun = length, fill = 0)]
#    id artist human song town
# 1:  3      1     1    0    0
# 2:  5      0     1    0    0
# 3:  7      1     1    1    0
# 4:  8      0     1    0    1