我有一个数据表
library(data.table)
df = data.table("a" = c('aa (1)', 'bb (2)', 'cc (3)'),
"b" = c('aa (2)', 'bb (2)', 'dd (3)'),
"c" = c('dd (3)', 'aa (1)', 'ff (3)'))
a b c
1: aa (1) aa (2) dd (3)
2: bb (2) bb (2) aa (1)
3: cc (3) dd (3) ff (3)
我想在“ a”列和其他列之间找到通用元素,而仅找到字符而不是数字 这样的结果是
aa and bb are common in a and b column
aa is common between column a and c.
我该怎么做。
我尝试使用相交,但是不知道我如何有效地去除数字。
答案 0 :(得分:1)
首先删除每个元素末尾的垃圾,然后将每列与a
相交。这样,第二列V2
将作为向量列表,第三列V3
将作为字符串:
df[, lapply(.SD, sub, pattern = "[ (].*", replacement = "")][,
.(names(df)[-1], sapply(.SD, intersect, a)), .SDcols = -1][,
.(V1, V2, V3 = sapply(V2, toString))]
给予:
V1 V2 V3
1: b aa,bb aa, bb
2: c aa aa
或者如果您喜欢长格式,则使用以下内容,除了最后一行外,其他内容与上述相同:
df[, lapply(.SD, sub, pattern = "[ (].*", replacement = "")][,
.(names(df)[-1], sapply(.SD, intersect, a)), .SDcols = -1][,
lapply(.SD, unlist), by = V1]
给予:
V1 V2
1: b aa
2: b bb
3: c aa