sta*_*tar 3 compare r dataframe
我有两个数据框如下,我想比较这些表的值(基于相同的行和列)和指定相同的值与TRUE否则与FALSE.
data1:
id A B C
m1 2 2 2
m2 2 1 2
data2:
id A D B
m1 1 2 2
m2 2 3 2
Output:
id A B
m1 FALSE TRUE
m2 TRUE FALSE
Run Code Online (Sandbox Code Playgroud)
创建两个数据集中常见的列名索引,根据该数据集对数据集进行子集并执行比较(==)
nm1 <- intersect(names(data1), names(data2))
cbind(data1[1], data1[nm1][-1]==data2[nm1][-1])
# id A B
#1 m1 FALSE TRUE
#2 m2 TRUE FALSE
Run Code Online (Sandbox Code Playgroud)
您可以merge后这两个数据帧melt荷兰国际集团通过id找到相交列.然后生成一个具有值的相等条件的新列.最后dcast回到输出表的宽格式:
library(reshape2)
df1 <- melt(data1,"id")
df2 <- melt(data2,"id")
df3 <- merge(df1,df2,by=c("id","variable"))
df3$value <- df3$value.x == df3$value.y
result <- dcast(df3, id~variable)
##id A B
##1 m1 FALSE TRUE
##2 m2 TRUE FALSE
Run Code Online (Sandbox Code Playgroud)