我正在尝试比较 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 相当陌生,甚至不确定如何开始解决这个问题。 目前,我创建了我想相互比较的数据帧列表,但非常感谢任何建议。 谢谢你的时间!
尝试
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
确保名称不是因素,否则将其转换为字符。