R:如何附加具有不同列号的不同文本文件?
R: How to append different text files with different column numbers?
我有一系列由 MetOffice 提供的数据集。数据描述了英国的每日降雨量数据,我有 2008 年至 2015 年的数据。即有 9 个文本文件。我希望他们在彼此下方附加一个以创建一个大型数据集。那就是我想追加 2008 年,然后是 2009 年,然后是 2010 年,直到 2016 年的数据。
我将数据集导入到 R 环境中,想使用 Base R 连接所有数据集,有人可以帮我吗?
到目前为止,我已经创建了一个代码来读取这样的数据:
setwd("C:/Useful Data/UK Daily Rainfall Data")
temp = list.files(pattern="*.txt")
for (i in 1:length(temp))
assign(temp[i], read.table(temp[i],header = FALSE,sep=",",fill=TRUE))
此代码已使用原始名称导入了所有数据集。这可以在下图中描述:
这里的主要挑战还在于所有数据集都有不同数量的变量。
编辑:尝试@akrun 解决方案后出错:
我们可以使用 library(data.table)
中的 rbindlist
,它也有 fill
参数,以防每个数据集中的列数不同
library(data.table)
rbindlist(lapply(temp, fread), use.names=TRUE, fill=TRUE, idcol=TRUE)
# .id V1 V2 V3
#1: 1 1 2 NA
#2: 1 2 3 NA
#3: 1 3 4 NA
#4: 2 1 NA 6
#5: 2 2 NA 7
#6: 2 3 NA 8
#7: 2 4 NA 9
#8: 2 5 NA 10
数据
d1 <- data.frame(V1= 1:3, V2= 2:4)
d2 <- data.frame(V1= 1:5, V3= 6:10)
lst <- list(d1, d2)
lapply(seq_along(lst), function(i) write.table(lst[[i]],
paste0('d', i, '.txt'), row.names=FALSE, quote=FALSE))
temp <- list.files(pattern="*.txt")
我有一系列由 MetOffice 提供的数据集。数据描述了英国的每日降雨量数据,我有 2008 年至 2015 年的数据。即有 9 个文本文件。我希望他们在彼此下方附加一个以创建一个大型数据集。那就是我想追加 2008 年,然后是 2009 年,然后是 2010 年,直到 2016 年的数据。
我将数据集导入到 R 环境中,想使用 Base R 连接所有数据集,有人可以帮我吗?
到目前为止,我已经创建了一个代码来读取这样的数据:
setwd("C:/Useful Data/UK Daily Rainfall Data")
temp = list.files(pattern="*.txt")
for (i in 1:length(temp))
assign(temp[i], read.table(temp[i],header = FALSE,sep=",",fill=TRUE))
此代码已使用原始名称导入了所有数据集。这可以在下图中描述:
这里的主要挑战还在于所有数据集都有不同数量的变量。
编辑:尝试@akrun 解决方案后出错:
我们可以使用 library(data.table)
中的 rbindlist
,它也有 fill
参数,以防每个数据集中的列数不同
library(data.table)
rbindlist(lapply(temp, fread), use.names=TRUE, fill=TRUE, idcol=TRUE)
# .id V1 V2 V3
#1: 1 1 2 NA
#2: 1 2 3 NA
#3: 1 3 4 NA
#4: 2 1 NA 6
#5: 2 2 NA 7
#6: 2 3 NA 8
#7: 2 4 NA 9
#8: 2 5 NA 10
数据
d1 <- data.frame(V1= 1:3, V2= 2:4)
d2 <- data.frame(V1= 1:5, V3= 6:10)
lst <- list(d1, d2)
lapply(seq_along(lst), function(i) write.table(lst[[i]],
paste0('d', i, '.txt'), row.names=FALSE, quote=FALSE))
temp <- list.files(pattern="*.txt")