【问题标题】:sqldf in R compare two data.frames and store outputR中的sqldf比较两个data.frames并存储输出
【发布时间】:2021-03-21 16:05:58
【问题描述】:

所以,我有大约 500 个 .txt 数据文件,它们都包含 8 列。每个数据文件在每一列中都有相同的值(行)。如果您比较 datafile1 和 datafile2 ,那么它们的行数大多不同,但它们中的一些行值是相同的,而有些则不是。 我想找到datafile1和datafile1+1=datafile2之间不同的所有值,我已经用sqldf解决了。

首先我使用 lapply 加载所有文件

list_of_files <- list.files(path = ".", recursive = TRUE, pattern = "\\.txt$", full.names =TRUE)

DT <- lapply(list_of_files, read.table)

加载所有数据文件,这样第一个数据文件可以用DT[[1]]选择,第二个用DT[[1+1]]选择,适合循环使用。

对于 DT,我只想比较每个数据文件的 V4 和 V5 列,我想我可以用 DT[[i]] 和 DT[[i+1]] 循环它,但我无法让它工作.下面我展示了对 DT[[1]] 和 DT[[2]] 有效的方法。首先,我创建了 data.frames,其中包含相应 data.frames 的 V4 和 V5 列:

dt1<-data.frame(DT[[1]]$V4,DT[[1]]$V5)

dt2<-data.frame(DT[[1+1]]$V4,DT[[1+1]]$V5)

这里我只选择 dt1 和 dt2 不同的值:

df<-sqldf('SELECT * FROM dt1 EXCEPT SELECT * FROM dt2')

我想对所有 500 个数据文件循环 df 操作 DT[[i]] DT[[i+1]] 将所有 df 值存储在 data.frame 中

也许有人知道如何循环?

提前致谢

【问题讨论】:

    标签: r dataframe for-loop lapply sqldf


    【解决方案1】:

    创建一个函数:

    get_data<- function(dt1, dt2) sqldf('SELECT * FROM dt1 EXCEPT SELECT * FROM dt2')
    

    现在使用Map 将此函数应用于循环并将其应用于每个DT[i]DT[i+1]

    result <- Map(get_data, DT[-length(DT)], DT[-1])
    

    【讨论】:

      【解决方案2】:

      非常感谢,效果很好!我就知道会有人知道! 目前的结果输出包含您的解决方案中的所有列 V1 到 V8。如果你只想要某些列,那么你可以修改函数,如下所示:

      rm(list=ls())

      library(sqldf)

      setwd("Path_to_txt-files")

      list_of_files &lt;- list.files(path = ".", recursive = TRUE,pattern = "\\.txt$",full.names = TRUE)

      DT &lt;- lapply(list_of_files, read.table)

      dt1&lt;-data.frame(DT[[25]]$V4,DT[[25]]$V5)

      dt2&lt;-data.frame(DT[[25+1]]$V4,DT[[25+1]]$V5)

      #df&lt;-sqldf('SELECT * FROM dt1 EXCEPT SELECT * FROM dt2') 如果你想在多个文件中循环,则不使用

      结果输出将仅包含 V4 和 V5 列:

      get_data&lt;- function(dt1, dt2) sqldf('SELECT V4,V5 FROM dt1 EXCEPT SELECT V4,V5 FROM dt2')

      result &lt;- Map(get_data, DT[-length(DT)], DT[-1])

      result

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 2015-12-18
        • 2021-03-08
        • 1970-01-01
        • 2022-01-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多