如何在 R 中合并具有不等行的多个文件
How Can I Merge Multiple Files with Unequal Rows in R
我有大约 100 个两列和大约 320-500 行的文本文件,我想合并到一个 .csv 文件中。
例如,我的文件 A 看起来像这样
A B
1 100
2 200
3 300
4 400
文件 B 看起来像这样
A B
1 100
2 200
3 300
4 400
5 300
6 400
然而,当我在 R 中输入这段代码时:write.csv (data_list, ("file.csv"), row.names = FALSE, na="")
,
我收到此错误消息:"Error in data.frame(list(V1 = c(0.025, 0.035, 0.045, 0.055, 0.065, 0.075, : arguments imply differing number of rows: 500, 599, 508, 489, 547, 624, 587, 534, 499, 494, 566, 520, 541, 543, 615"
我希望我的文件看起来像这样(一个文件将我的所有 100 个文本文件按两列组合在一起):
文件AB
A B
1 100
2 200
3 300
4 400
1 100
2 200
3 300
4 400
5 300
6 400
在一个巨大的 csv 文件中。如果可能的话,请帮助我。我是脚本新手,会根据需要提供更多信息。
这是实现它的不同选择。
R代码:
# Option 1: Using plyr
library(plyr)
datafiles <-list.files (pattern='*.txt')
dataset <- ldply(datafiles, read.table, header=F)
# Option 2: Using fread
library(data.table)
datafiles <-list.files (pattern='*.txt')
dataset = rbindlist(lapply( datafiles, fread, header=F))
# Option 3: do.call method
dataset <- do.call("rbind",lapply(datafiles,
FUN=function(files){read.table(files,
header=FALSE)}))
# Option 4: Loops are any time slow so avoid, but have put here just for reference
for (file in datafiles){
# if the merged dataset doesn't exist, create it
if (!exists("dataset")){
dataset <- read.table(file, header=FALSE)
}
# if the merged dataset does exist, append to it
if (exists("dataset")){
temp_dataset <-read.table(file, header=FALSE)
dataset<-rbind(dataset, temp_dataset)
rm(temp_dataset)
}
}
# Writing to csv
write.csv (dataset, ("file.csv"), row.names = FALSE, na="")
我认为使用 dplyr 或 plyr 包函数实在是太过分了。建议尝试 write.table,(因为所需输出中没有逗号):
write.table(file_A, file="comb_file.txt")
write.table(file_B, file="comb_file.txt", append=TRUE)
您当然可以使用 write.csv
,但这样输出将与您说明的不一样。
我有大约 100 个两列和大约 320-500 行的文本文件,我想合并到一个 .csv 文件中。
例如,我的文件 A 看起来像这样
A B
1 100
2 200
3 300
4 400
文件 B 看起来像这样
A B
1 100
2 200
3 300
4 400
5 300
6 400
然而,当我在 R 中输入这段代码时:write.csv (data_list, ("file.csv"), row.names = FALSE, na="")
,
我收到此错误消息:"Error in data.frame(list(V1 = c(0.025, 0.035, 0.045, 0.055, 0.065, 0.075, : arguments imply differing number of rows: 500, 599, 508, 489, 547, 624, 587, 534, 499, 494, 566, 520, 541, 543, 615"
我希望我的文件看起来像这样(一个文件将我的所有 100 个文本文件按两列组合在一起):
文件AB
A B
1 100
2 200
3 300
4 400
1 100
2 200
3 300
4 400
5 300
6 400
在一个巨大的 csv 文件中。如果可能的话,请帮助我。我是脚本新手,会根据需要提供更多信息。
这是实现它的不同选择。
R代码:
# Option 1: Using plyr
library(plyr)
datafiles <-list.files (pattern='*.txt')
dataset <- ldply(datafiles, read.table, header=F)
# Option 2: Using fread
library(data.table)
datafiles <-list.files (pattern='*.txt')
dataset = rbindlist(lapply( datafiles, fread, header=F))
# Option 3: do.call method
dataset <- do.call("rbind",lapply(datafiles,
FUN=function(files){read.table(files,
header=FALSE)}))
# Option 4: Loops are any time slow so avoid, but have put here just for reference
for (file in datafiles){
# if the merged dataset doesn't exist, create it
if (!exists("dataset")){
dataset <- read.table(file, header=FALSE)
}
# if the merged dataset does exist, append to it
if (exists("dataset")){
temp_dataset <-read.table(file, header=FALSE)
dataset<-rbind(dataset, temp_dataset)
rm(temp_dataset)
}
}
# Writing to csv
write.csv (dataset, ("file.csv"), row.names = FALSE, na="")
我认为使用 dplyr 或 plyr 包函数实在是太过分了。建议尝试 write.table,(因为所需输出中没有逗号):
write.table(file_A, file="comb_file.txt")
write.table(file_B, file="comb_file.txt", append=TRUE)
您当然可以使用 write.csv
,但这样输出将与您说明的不一样。