代码之家  ›  专栏  ›  技术社区  ›  SJB

r中csv与csv的比较

r
  •  0
  • SJB  · 技术社区  · 6 年前

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

    库(dplyr)
    A<-C(“广告”,“广告”,“ABC”)。
    B<-C(121、345、23.300)
    C<-C(21、22、23)
    srce<-cbind.data.frame(A、B、C)
    D<-C(“广告”,“DS”,“ABC”)。
    E<-C(121、345、23)
    F<-C(21、22、23)
    trgt<-cbind.data.frame(D、E、F)
    列名(trgt)<-列名(srce)
    
    #比较csv文件
    nn<-反连接(SRCE、TRGT)
    < /代码> 
    
    

    最后的输出给出了不匹配的行,

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

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

    谢谢 巴拉吉W代码,

     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

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

    谢谢 巴拉吉

    1 回复  |  直到 6 年前
        1
  •  3
  •   LAP Marco De Virgilis    5 年前

    如果您使用 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 矩阵的 srce != trgt 并显示所有列的名称 colSums > 0 :

    names(which(colSums(srce != trgt, na.rm = TRUE) > 0))
    
    [1] "a" "b"