在两列中标识相同的项目?

如果我有一个伪数据帧,如下所示:

  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

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

这只是一个简化的示例。实际数据帧很大,因此无法手动计数。

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

评论
xid
xid

One option is intersect/length

v1 <- with(df1, length(intersect(Name.x, Name.y)))
v1
#[1] 3

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

with(df1, length(setdiff(Name.x, Name.y)))

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

with(df1, length(setdiff(Name.y, Name.x)))

要么

length(unique(unlist(df1[c('Name.x', 'Name.y')]))) - v1
#[1] 1

数据

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"))
点赞
评论