相关疑难解决方法(0)

将多个data.frames合并为一个带循环的data.frame

我想把merge几个data.frames合二为一data.frame.因为我有一个完整的文件列表,我试图用循环结构来做.

到目前为止,循环方法工作正常.然而,它看起来效率很低,我想知道是否有更快更容易的方法.

这是场景:我有一个包含多个.csv文件的目录.每个文件包含可用作合并变量的相同标识符.由于文件的大小相当大,我想把每个文件一次一个地读入R而不是一次读取所有文件.所以我得到了目录的所有文件,list.files并在前两个文件中读取.之后我用它merge来买一个data.frame.

FileNames <- list.files(path=".../tempDataFolder/")
FirstFile <- read.csv(file=paste(".../tempDataFolder/", FileNames[1], sep=""),
             header=T, na.strings="NULL")
SecondFile <- read.csv(file=paste(".../tempDataFolder/", FileNames[2], sep=""),
              header=T, na.strings="NULL")
dataMerge <- merge(FirstFile, SecondFile, by=c("COUNTRYNAME", "COUNTRYCODE", "Year"),
             all=T)
Run Code Online (Sandbox Code Playgroud)

现在我使用for循环将所有剩余的.csv文件和merge它们放入已存在的文件中data.frame:

for(i in 3:length(FileNames)){ 
ReadInMerge <- read.csv(file=paste(".../tempDataFolder/", FileNames[i], sep=""),
               header=T, na.strings="NULL")
dataMerge <- merge(dataMerge, ReadInMerge, by=c("COUNTRYNAME", "COUNTRYCODE", "Year"),
             all=T)
}
Run Code Online (Sandbox Code Playgroud)

即使它工作得很好我想知道是否有更优雅的方式来完成工作?

loops for-loop r

27
推荐指数
1
解决办法
3万
查看次数

r data.table Join In Place 多列

data.table 是惊人的。

我想做一个就地连接,但要保留两个表中的所有列。这个问题演示了如何为单个列执行此操作。当我希望连接表中的所有列都包含在最终结果中并在一个内存位置完成所有操作时,我该如何概括这一点。

library(data.table)
dt1 <- data.table(col1 = c("a", "b", "c"), 
                  col2 = 1:3, 
                  col3 = c(TRUE, FALSE, FALSE))

setkey(dt1, col1)

set.seed(1)
dt2 <- data.table(col1 = sample(c("a", "b", "c"), size = 10, replace = TRUE), 
                  another_col = sample(1:10, size = 10, replace = TRUE), 
                  and_anouther = sample(c(TRUE, FALSE), size = 10, replace = TRUE))

setkey(dt2, col1)

# I want to stick the columns from dt1 onto dt2

# this works
dt3 <- dt2[dt1]
dt3
    col1 another_col and_anouther col2 …
Run Code Online (Sandbox Code Playgroud)

r data.table

3
推荐指数
1
解决办法
2371
查看次数

标签 统计

r ×2

data.table ×1

for-loop ×1

loops ×1