这是我的代码。这是数据帧的列表。我的实际列表更大,该列表有3个条目,我的列表有1000多个。只是一个例子:
w=list(structure(list(Col1 = structure(1:6, .Label = c("A", "B",
"C", "D", "E", "F"), class = "factor"), Col2 = structure(c(1L,
2L, 3L, 2L, 4L, 5L), .Label = c("B", "C", "D", "F", "G"), class = "factor")), class = "data.frame", row.names = c(NA,
-6L)), structure(list(Col1 = structure(c(1L, 4L, 5L, 6L, 2L,
3L), .Label = c("A", "E", "H", "M", "N", "P"), class = "factor"),
Col2 = structure(c(1L, 2L, 3L, 2L, 4L, 5L), .Label = c("B",
"C", "D", "F", "G"), class = "factor")), class = "data.frame", row.names = c(NA,
-6L)), structure(list(Col1 = structure(c(1L, 4L, 6L, 5L, 2L,
3L), .Label = c("A", "W", "H", "M", "T", "U"), class = "factor"),
Col2 = structure(c(1L, 2L, 3L, 2L, 4L, 5L), .Label = c("B",
"C", "D", "S", "G"), class = "factor")), class = "data.frame", row.names = c(NA,
-6L)))
我需要的是识别每个条目中重复的对,也就是说,它进入第一个条目并遍历所有对,进入第二个条目,查看是否存在重复的对与第一个输入相比
在第三个条目中,他进行相同的搜索,同时查看第一个条目和第二个条目,并检查第三个条目中的相关对是否同时出现在第一个条目和第二个条目中。
如果您只有第一和第三项,那么我不在乎。或第二和第三对我也不感兴趣。
**也就是说,他应该给我A B和EF。**
请注意,HG对仅在第二个和第三个入口重复,因此这对我不感兴趣。
我需要下订单,至关重要的是,响应对属于第一个条目。最好的答案是使这些对属于所有输入,例如A B的情况。EF的情况将是第二好的选择。
我希望能够将它们保存在文本元素的向量中。
可以用来表达这个想法的功能是什么?有任何建议吗?
答案 0 :(得分:8)
Reduce(f = dplyr::intersect, x = w)
# Col1 Col2
# 1 A B
# 2 E F
# Warning messages:
# 1: Column `Col1` joining factors with different levels, coercing to character vector
# 2: Column `Col1` joining character vector and factor, coercing into character vector
如果您使用data.table
而不是列表中的data.frame
,然后再使用fintersect
,我认为这样做会更快。如果您正在读取文件,lapply(your_files, fread)
将很快创建data.table
(并避免因警告而引起的因素问题)。
答案 1 :(得分:0)
这是另一个紧凑的解决方案。在上面的注释中,您解释了您更改了示例,结果应如下所示。此解决方案使用merge
组合列表中的所有对象。这样只会给出在所有对象中找到的“对”。
a <- w[[1]]; for(i in 2:length(w)){a <- merge(a, w[[i]])}
a
# Col1 Col2
#1 A B