比较跨多个数据帧的列的元素以输出R中的匹配数

时间:2017-08-23 02:11:34

标签: r dataframe compare

我正在尝试比较R中不同长度和非数字元素顺序的多个数据帧中的单个列。我的数据由多个样本中的唯一非数字元素组成,这些元素已保存为自己的数据帧,每个数据帧没有双精度数,我想将它们与其他几个数据帧进行比较,看看多个数据帧中出现了哪些元素,以及出现了相同元素的数据帧数。

样本数据

df1 <- data.frame(names = rep(c("Nina", "Doug", "Alli", "Doug")))
df2 <- data.frame(names = rep(c("Steve", "Alli", "Nina")))
df3 <- data.frame(names = rep(c("Doug", "Steve", "Nina", "Bob")))

  df1    df2    df3
[names] [names] [names]   
 Nina    Steve  Doug   
 Doug    Alli   Steve   
 Alli    Nina   Nina  
 Doug           Bob

现在我想将df1 df2 df3与一个输出进行比较,该输出告诉我哪些名称在数据框架中是相似的,以及它们出现的次数。

输出

Names Matches

Nina [3]
Doug [3]
Alli [2]
Steve[2]
Bob  [1]

我的真实数据集有更多的数据框和名称,如果输出可以从大多数数据帧中的大多数外观到最少的顺序那么奖励。

我是R的新手,并不确定如何开始解决这个问题。目前我已经创建了我想要相互比较的数据框列表,但是非常感谢任何建议。感谢您的时间!

1 个答案:

答案 0 :(得分:1)

尝试

df1 <- data.frame(names = rep(c("Nina", "Doug", "Alli", "Doug")), stringsAsFactors = F)
df2 <- data.frame(names = rep(c("Steve", "Alli", "Nina")), stringsAsFactors = F)
df3 <- data.frame(names = rep(c("Doug", "Steve", "Nina", "Bob")), stringsAsFactors = F)

table(c(df1$names, df2$names, df3$names))

 Alli   Bob  Doug  Nina Steve 
    2     1     3     3     2 

或者,要格式化它:

df <- data.frame(table(c(df1$names, df2$names, df3$names)))
names(df) <- c("Names", "Matches")

包括订购:

df[order(df$Matches, decreasing = T),]
  Names Matches
3  Doug       3
4  Nina       3
1  Alli       2
5 Steve       2
2   Bob       1

确保名称不是因素,否则将其转换为字符。