Ι有一个.txt文件列表,其中包含特定型号和特定月份的数据。我在一个循环中读取它们,并将它们存储在一个列表中,如下面的代码所示,这很好用!
library("dplyr")
library("tidyr")
library("reshape2")
library("plyr")
library("data.table")
library("gridExtra")
library("varhandle")
library("lattice")
library("rowr")
library("lubridate")
library("hydroTSM")
#
####################################
########### MONTHLY LOOP ###########
####################################
#
mons = c("OCT","NOV","DEC","JAN","FEB","MAR")
#
#####################
##### LOAD CMIP5 ####
#####################
for (i in 1:length(mons)) {
#
print(mons[i])
setwd("/mnt/.../cmip5/")
# Load all files
files = list.files(pattern="*.txt", full.names=F)
files
# Read all files as data frames
dat = lapply(files, function(x){
read.table(x, header=F, sep=",")
})
# Rename files
names(dat) = files
# Get all MONTHS ###LOOP HERE###
dat_regA_cmip5 = dat[grepl(mons[i], names(dat))]
length(dat_regA_cmip5)
#
}但是,我希望将该列表转换为包含多个列的单个数据框,并使用以下方法实现:
cmip5 = do.call(cbind, dat_regA_cmip5)当我在单个数据帧(dat_regA_cmip5:手动选择一个月,因此不在mons循环中)上使用do.call时,它工作得很好。但是当我把它放到mons循环中时,我得到了以下错误:
Error in data.frame(..., check.names = FALSE) :
arguments imply differing number of rows: 20, 19注:循环在OCT、NOV和DEC运行,但在1月停止
发布于 2020-03-17 03:22:25
如果数据集具有不同的行数,则最好使用rowr中的cbind.fill
library(rowr)
cmip5 = do.call(cbind.fill, c(dat_regA_cmip5, fill = NA))一个可重复使用的例子
df<-data.frame(a=c(1,2,3),b=c(1,2,3))
df2 <- data.frame(c = 1:2, d = 3:4)
lst1 <- list(df, df2)
do.call(cbind.fill, c(lst1, fill = NA))
# a b c d
#1 1 1 1 3
#2 2 2 2 4
#3 3 3 NA NA对于常规cbind,它返回错误
do.call(cbind, lst1)data.frame(...,check.names =
)中出现FALSE错误:参数隐含不同的行数: 3,2
https://stackoverflow.com/questions/60712039
复制相似问题