计算两个数据帧之间的匹配实例

时间:2014-10-24 02:22:52

标签: r

我是R的新手,无法找到我的答案/任何有效的东西。 我有两个看起来像......的数据框。

Teams
A
B
C
...

TCF
A
B
C
C
B
A
...

我需要计算每个第一个DF列出现在第二个DF中的实例数,并将该值返回给第一个DF。提前谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用base R执行此操作:

  sapply(unique(df1$Teams), function(x) sum(df2$TCF %in% x))
   #A B C 
  #2 2 2 

或者

  setNames(table(match(df2$TCF, unique(df1$Teams))), unique(df1$Teams))

  #A B C 
  #2 2 2 

或使用data.table

 library(data.table)
 setkey(setDT(df1), Teams)
 setkey(setDT(df2), TCF)
 df2[J(unique(df1$Teams)),.N, by=.EACHI]
 #    TCF N
 #1:   A 2
 #2:   B 2
 #3:   C 2

数据

 df1 <- structure(list(Teams = c("A", "B", "C")), .Names = "Teams", 
 class = "data.frame", row.names = c(NA,-3L))


 df2 <- structure(list(TCF = c("A", "B", "C", "C", "B", "A")), .Names = "TCF", 
 class = "data.frame", row.names = c(NA, -6L))

答案 1 :(得分:1)

这个选项对你的眼睛会更容易吗?

library(dplyr)
df2 %>% count(TCF) %>% filter(TCF %in% unique(df1$Teams))
# Source: local data frame [3 x 2]
#   TCF n
# 1   A 2
# 2   B 2
# 3   C 2

数据

df1 <- structure(list(Teams = c("A", "B", "C")), .Names = "Teams", class = "data.frame", row.names = c(NA, 
-3L))
df2 <- structure(list(TCF = structure(c(1L, 2L, 3L, 3L, 2L, 1L, 4L, 
5L, 5L), .Label = c("A", "B", "C", "X", "Y"), class = "factor")), .Names = "TCF", row.names = c(NA, 
-9L), class = "data.frame")