我在data.table中有重复的行 - 见下文。一些变量是列表。
ID l29 s14 s2 s7 s71 s91
12345 NULL 3 NULL NULL NULL NULL
12345 NULL NULL 1 NULL NULL NULL
12345 NULL NULL NULL 2 NULL NULL
12345 NULL NULL NULL NULL c(4.5, 8, 9, 10) NULL
12345 NULL NULL NULL NULL c(4.5, 8, 9, 10) NULL
12345 NULL NULL NULL NULL c(4.5, 8, 9, 10) NULL
12345 NULL NULL NULL NULL NULL c(6, 7)
12345 11 NULL NULL NULL NULL NULL
12345 NULL NULL NULL NULL c(4.5, 8, 9, 10) NULL
12345 NULL NULL NULL NULL NULL c(6, 7)
我想将上述内容总结为如下所示:
12345 11 3 1 2 c(4.5, 8, 9, 10) c(6, 7)
有人让我输入数据,我希望这样做吗?
structure(list(SSN_TAX_ID = c("12345", "12345", "12345", "12345",
"12345", "12345", "12345", "12345", "12345", "12345"), L29 = list(
NULL, NULL, NULL, NULL, NULL, NULL, NULL, 11, NULL, NULL),
S14 = list(3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL), S2 = list(NULL, 1, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL), S7 = list(NULL, NULL, 2, NULL, NULL,
NULL, NULL, NULL, NULL, NULL), S71 = list(NULL, NULL,
NULL, c(4.5, 8, 9, 10), c(4.5, 8, 9, 10), c(4.5, 8, 9,
10), NULL, NULL, c(4.5, 8, 9, 10), NULL), S91 = list(
NULL, NULL, NULL, NULL, NULL, NULL, c(6, 7), NULL, NULL,
c(6, 7))), .Names = c("SSN_TAX_ID", "L29", "S14", "S2",
"S7", "S71", "S91"), class = "data.frame", row.names = c(NA,
-10L))
答案 0 :(得分:1)
这非常混乱,但是:
setDT(DT) # since the OP posted a data frame
DT[, lapply(.SD, function(x) unique(Filter(Negate(is.null), x)))]
# SSN_TAX_ID L29 S14 S2 S7 S71 S91
# 1: 12345 11 3 1 2 4.5, 8.0, 9.0,10.0 6,7
在我们统一之前, Filter(Negate(is.null), x)
从每列中删除NULL。
在OP的示例的特殊情况下,将Reduce
与union
一起使用也会起作用:
DT[, lapply(.SD, function(x) .(Reduce(union, x)))]
答案 1 :(得分:0)
您可以使用apply函数从每列中选择唯一记录,然后从中删除NULL值。
df<-apply(df,2,unique)
df<-unlist(df)
df<-df[df!="NULL"]