在循环R中合并

在循环R中合并,r,for-loop,merge,R,For Loop,Merge,我正在使用for循环将多个文件与另一个文件合并: 文件它更适合作为评论,但我还不能评论 rbind不是比合并更好吗? 这似乎是你想要完成的 设置fill参数TRUE以处理不同的列号: asd <- data.table(x1 = c(1, 2), x2 = c(4, 5)) a <- data.table(x2 = 5) rbind(asd, a, fill = TRUE) x1 x2 1: 1 4 2: 2 5 3: NA 5 因此,这将创建一个读取文件的函数,

我正在使用for循环将多个文件与另一个文件合并:


文件它更适合作为评论,但我还不能评论

rbind不是比合并更好吗? 这似乎是你想要完成的

设置
fill
参数
TRUE
以处理不同的列号:

asd <- data.table(x1 = c(1, 2), x2 = c(4, 5))
a <- data.table(x2 = 5)
rbind(asd, a, fill = TRUE)

   x1 x2
1:  1  4
2:  2  5
3: NA  5
因此,这将创建一个读取文件的函数,并将其推送到
lappy
,这样您将得到一个包含所有
数据
文件的列表,每个文件都位于自己的数据帧中

使用
ldply
from
plyr
r将所有数据帧绑定到一个数据帧中

现在还不要碰我的数据

binded.data <- data.table(binded.data, key = ID)
更新3

您可以添加
cat
以查看函数当前正在读取的文件。因此,您可以查看哪个文件的内存不足。这将为您指明一次可以读取多少文件的方向

  ff <- function(input){
# This will print name of the file it is reading now
cat(input, "\n")
data <- fread(input)
# This keeps only the rows of 'data' whose ID matches ID of 'mydata'
data <- data[ID %in% mydata[, ID]]
}

ff它更适合作为评论,但我还不能评论

rbind不是比合并更好吗? 这似乎是你想要完成的

设置
fill
参数
TRUE
以处理不同的列号:

asd <- data.table(x1 = c(1, 2), x2 = c(4, 5))
a <- data.table(x2 = 5)
rbind(asd, a, fill = TRUE)

   x1 x2
1:  1  4
2:  2  5
3: NA  5
因此,这将创建一个读取文件的函数,并将其推送到
lappy
,这样您将得到一个包含所有
数据
文件的列表,每个文件都位于自己的数据帧中

使用
ldply
from
plyr
r将所有数据帧绑定到一个数据帧中

现在还不要碰我的数据

binded.data <- data.table(binded.data, key = ID)
更新3

您可以添加
cat
以查看函数当前正在读取的文件。因此,您可以查看哪个文件的内存不足。这将为您指明一次可以读取多少文件的方向

  ff <- function(input){
# This will print name of the file it is reading now
cat(input, "\n")
data <- fread(input)
# This keeps only the rows of 'data' whose ID matches ID of 'mydata'
data <- data[ID %in% mydata[, ID]]
}

ff您正在尝试将所有文本文件合并到单个文本文件中吗?如果ID是唯一的,为什么不使用
rbind
cbind
来连接它们,而不是合并?我认为没有一个函数可以按照您希望的方式对数据结构进行“合并”。我们可能得写一本。您的
数据
文件不一定总是只包含列“x3”对吗?数据总是完全相同,1列“ID”,1列“x3”。我在单独的数据文件中的ID比在MyData中的ID多。您是否试图将所有文本文件合并到单个文本文件中?如果ID是唯一的,为什么不使用
rbind
cbind
来连接它们,而不是合并?我认为没有一个函数可以按照您希望的方式对数据结构进行“合并”。我们可能得写一本。您的
数据
文件不一定总是只包含列“x3”对吗?数据总是完全相同,1列“ID”,1列“x3”。我在单独的数据文件中只有比mydataSorry中更多的ID,我不确定我是否正确理解它。你是说rbind所有个人的“数据”吗?我尝试了rbindmydata和循环中的数据,但在示例中不起作用,但在我的数据中不起作用。无法为我的所有“数据”文件(=100GB)获取一个数据表,我遇到了内存问题。是否有可能按顺序合并(对于每个“数据”和“mydata”),因为mydata要小得多。或者只添加与此绑定数据中的“mydata”匹配的观测值。您能够创建列表吗?“a我遇到了内存问题,”aI有一种感觉,即使是最终合并的文件也会太大而无法处理:/现在你可以尝试将“文件”分割成更小的块。所以不是所有600个文件都能一次完成,但可能是6次运行100个文件?对不起,我不确定我是否理解正确。你是说rbind所有个人的“数据”吗?我尝试了rbindmydata和循环中的数据,但在示例中不起作用,但在我的数据中不起作用。无法为我的所有“数据”文件(=100GB)获取一个数据表,我遇到了内存问题。是否有可能按顺序合并(对于每个“数据”和“mydata”),因为mydata要小得多。或者只添加与此绑定数据中的“mydata”匹配的观测值。您能够创建列表吗?“a我遇到了内存问题,”aI有一种感觉,即使是最终合并的文件也会太大而无法处理:/现在你可以尝试将“文件”分割成更小的块。所以不是所有的600个文件都能一次完成,但可能是6次运行100个文件?
files <- list.files("path", pattern=".TXT", ignore.case=T)

ff <- function(input){
  data <- fread(input) 
}

a <- lapply(files, ff)
library(plyr)
binded.data <- ldply(a, function(x) rbind(x, fill = TRUE))
binded.data <- data.table(binded.data, key = ID)
files <- list.files("path", pattern=".TXT", ignore.case=T)

ff <- function(input){
data <- fread(input)
# This keeps only the rows of 'data' whose ID matches ID of 'mydata'
data <- data[ID %in% mydata[, ID]]
}

a <- lapply(files, ff)
library(plyr)
binded.data <- ldply(a, function(x) rbind(x, fill = TRUE))
  ff <- function(input){
# This will print name of the file it is reading now
cat(input, "\n")
data <- fread(input)
# This keeps only the rows of 'data' whose ID matches ID of 'mydata'
data <- data[ID %in% mydata[, ID]]
}