比较两个数据框中的名称

时间:2018-12-23 21:12:25

标签: r compare

我有两个数据帧,FM,带有名称行(First,Middle和Surname)。我想找到两个数据框中的行。

F <- read.table(
  text = "First   Middle Surname
  Alessio  Antonin    Smith
  Alessio  Antonio    Smith
  Alessio    Carlo    Smith
  Alessio  Claudio    Smith
  Alessio    Diego    Smith
  Alessio Emiliano    Smith", header = TRUE)


M <- read.table(
  text = "First  Middle Surname
  Alessio Lorenzo    Smith
  Alessio  Miguel    Smith
  Alessio  Rafael    Smith
  Alessio Santino    Smith
  Alessio    Vito    Smith
  Claudio Alessio    Smith", header = TRUE)

compare(F,M)似乎无效。

2 个答案:

答案 0 :(得分:4)

这是所有列上的合并。

A <- data.frame(a = 1:10, b = 21:30, c = 31:40)
B <- data.frame(a = 9:15, b = 29:35, c = 39:45)


merge(A, B)# implicit by = names(A) since all columns are common (thanks Rich Scriven)

#    a  b  c
# 1 10 30 40
# 2  9 29 39

答案 1 :(得分:1)

假设您有以下数据框:

 F <- data.frame(First=c("A", "B", "C"), 
                 Middle=c("A", "C", "C"), 
                 Last=c("D", "E", "F"))

 M <- data.frame(First=c("B", "B", "C"), 
                 Middle=c("J", "J", "C"),
                 Last=c("F", "S", "F"))

然后使用dplyr::intersect您可以获取每列的公共元素:

 intersect(F, M)
 # First Middle Last
 #   C      C    F

或者,您可以将datframe转换为1个向量,然后再次使用intersect获取整个数据帧上的匹配项

要获得整行,可以使用以下代码:

 F <- F %>% rowwise() %>% mutate(All=paste(First, Middle, Last))
 M <- M %>% rowwise() %>% mutate(All=paste(First, Middle, Last))
 intersect(F$All, M$All)