R中的CSV与CSV比较

时间:2018-11-16 07:29:09

标签: r

我需要比较R中的两个csv文件,并在两个文件中写入不匹配的记录。我可以使用以下代码完成上述任务,

 library(dplyr)
a <- c("ads", "ads", "abc")
b <- c(121, 345, 23.300)
c <- c(21,22,23)
srce <- cbind.data.frame(a,b,c)
d <- c("ads", "ds", "abc")
e <- c(121, 345, 23)
f <- c(21,22,23)
trgt <- cbind.data.frame(d, e, f)
colnames(trgt) <- colnames(srce)

#Compare csv files
nn <- anti_join(srce, trgt)

最终输出使我发现行不匹配,

Output

但是我需要找出两个文件中不匹配的单元格,

Desired Output

有没有办法识别不匹配的单元格而不是整个记录?

谢谢 Balaji.SJ

1 个答案:

答案 0 :(得分:3)

如果将stringsAsFactors = FALSE参数与cbind.data.frame一起使用,则可以通过简单的逻辑比较来达到目的:

library(dplyr)
a <- c("ads", "ads", "abc")
b <- c(121, 345, 23.300)
c <- c(21,22,23)
srce <- cbind.data.frame(a,b,c, stringsAsFactors = FALSE)
d <- c("ads", "ds", "abc")
e <- c(121, 345, 23)
f <- c(21,22,23)
trgt <- cbind.data.frame(d, e, f, stringsAsFactors = FALSE)
colnames(trgt) <- colnames(srce)


# logical comparison:
srce == trgt

         a     b    c
[1,]  TRUE  TRUE TRUE
[2,] FALSE  TRUE TRUE
[3,]  TRUE FALSE TRUE

要比较两个数据帧并提取不匹配的列的列名称,请计算矩阵colSums的{​​{1}}并显示带有srce != trgt的所有列的名称:

colSums > 0