首页 文章

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

提问于
浏览
1

我试图比较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 回答

  • 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
    

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

相关问题