识别两列中的相同项目?

Hel*_*ena 2 r

如果我有一个虚拟数据框,如下所示:

  ID Name.x Score.x Name.y Score.y
1  1      A      10      A      20
2  2      A      20      B      30
3  3      B      30      B      40
4  4      C      40      D      50
5  5      D      50      D      60
Run Code Online (Sandbox Code Playgroud)

我想知道当 Name.x 和 Name.y 中的项目相同时(例如,当 A、B、D 在两列中相同时 n=3)和项目不相同时的数量,如何计算?

这只是一个简化的例子。真实的数据框是相当大的,用手数是不可能的。

任何解决方案将不胜感激。

akr*_*run 5

一种选择是 intersect/length

v1 <- with(df1, length(intersect(Name.x, Name.y)))
v1
#[1] 3
Run Code Online (Sandbox Code Playgroud)

以及在 Name.x 中而不是在 'Name.y' 中的那些

with(df1, length(setdiff(Name.x, Name.y)))
Run Code Online (Sandbox Code Playgroud)

以及在 Name.y 中而不是在 'Name.x' 中的那些

with(df1, length(setdiff(Name.y, Name.x)))
Run Code Online (Sandbox Code Playgroud)

或者

length(unique(unlist(df1[c('Name.x', 'Name.y')]))) - v1
#[1] 1
Run Code Online (Sandbox Code Playgroud)

数据

df1 <- structure(list(ID = 1:5, Name.x = c("A", "A", "B", "C", "D"), 
    Score.x = c(10L, 20L, 30L, 40L, 50L), Name.y = c("A", "B", 
    "B", "D", "D"), Score.y = c(20L, 30L, 40L, 50L, 60L)),
    class = "data.frame", row.names = c("1", 
"2", "3", "4", "5"))
Run Code Online (Sandbox Code Playgroud)