如何显示R中的两个数据集不共享哪些变量?
我有两个数据集(A和B),一个有1600个观察值/行和1002个变量/列,另一个有860个观察值/行和1040个变量/列。我想快速检查哪些变量不包含在数据集A中,而包含在数据集B中,反之亦然。我只对列名感兴趣,对这些列中包含的条款不感兴趣。如何显示R中的两个数据集不共享哪些变量?,r,compare,R,Compare,我有两个数据集(A和B),一个有1600个观察值/行和1002个变量/列,另一个有860个观察值/行和1040个变量/列。我想快速检查哪些变量不包含在数据集A中,而包含在数据集B中,反之亦然。我只对列名感兴趣,对这些列中包含的条款不感兴趣。 我在这里发现了这个很棒的函数:本质上,我希望得到类似的输出: 我正在尝试的代码是:summary(comparedf(dataA,dataB))但是,不打印表,因为R对两个数据集进行逐行比较,然后在控制台中打印结果时空间不足。有没有一种快速的方法可以满足我的
我在这里发现了这个很棒的函数:本质上,我希望得到类似的输出:
我正在尝试的代码是:
summary(comparedf(dataA,dataB))
但是,不打印表,因为R对两个数据集进行逐行比较,然后在控制台中打印结果时空间不足。有没有一种快速的方法可以满足我的需要?我认为您可以使用
dplyr
包中的anti_join()
函数来查找不匹配的记录。它将为您提供数据集A和B不共享的行的输出。以下是一个例子:-
table1<-data.frame(id=c(1:5), animal=c("cat", "dog", "parakeet",
"lion", "duck"))
table2<-table1[c(1,3,5),]
library(dplyr)
anti_join(table1, table2, by="id")
id animal
1 2 dog
2 4 lion
table1可能有点笨重,但将setdiff()
与colnames()
结合起来可能会奏效。
同时执行setdiff(colnames(DataA)、colnames(DataB))
和setdiff(colnames(DataB)、colnames(DataA))
将为您提供两个向量,每个向量的列名出现在其中一个数据集中,但不在另一个数据集中。嗨,罗宾,感谢您抽出时间。数据集部分共享相同的变量名,但观测值是独立的,因此没有像ID那样的公共分母可以配对。此外,我不是在寻找行的差异,而是在寻找列的差异。两个数据帧之间的列名差异?我想我有办法了,我会修正我的答案的。这也非常有效!谢谢。@Anca没问题,很乐意帮忙!如果你不介意对我的解决方案投赞成票,那就太好了:)非常有魅力,谢谢。你帮我省了几个小时的工作,安东。
df1 <- data.frame(a=rnorm(100), b=rnorm(100), not=rnorm(100))
df2 <- data.frame(a=rnorm(100), b=rnorm(100))
df1[, !names(df1) %in% names(df2)] #returns column/variable that appears in df1 but not in df2