我有一个包含不同变量的数据框,可以共享一些因子级别:
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
有没有办法这样做?
如果没有,那么替代方法是按出现次数排序每一行的水平(在所有数据帧中出现)......
感谢您的任何好主意!
答案 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