首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R循环中,使用do.call将数据框列表转换为包含多列的单个数据框不起作用

在R循环中,使用do.call将数据框列表转换为包含多列的单个数据框不起作用
EN

Stack Overflow用户
提问于 2020-03-17 03:21:20
回答 1查看 30关注 0票数 0

Ι有一个.txt文件列表,其中包含特定型号和特定月份的数据。我在一个循环中读取它们,并将它们存储在一个列表中,如下面的代码所示,这很好用!

代码语言:javascript
复制
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)
  #
}

但是,我希望将该列表转换为包含多个列的单个数据框,并使用以下方法实现:

代码语言:javascript
复制
cmip5 = do.call(cbind, dat_regA_cmip5)

当我在单个数据帧(dat_regA_cmip5:手动选择一个月,因此不在mons循环中)上使用do.call时,它工作得很好。但是当我把它放到mons循环中时,我得到了以下错误:

代码语言:javascript
复制
Error in data.frame(..., check.names = FALSE) :
  arguments imply differing number of rows: 20, 19

注:循环在OCT、NOV和DEC运行,但在1月停止

EN

回答 1

Stack Overflow用户

发布于 2020-03-17 03:22:25

如果数据集具有不同的行数,则最好使用rowr中的cbind.fill

代码语言:javascript
复制
library(rowr)
cmip5 = do.call(cbind.fill, c(dat_regA_cmip5, fill = NA))

一个可重复使用的例子

代码语言:javascript
复制
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,它返回错误

代码语言:javascript
复制
do.call(cbind, lst1)

data.frame(...,check.names =

)中出现FALSE错误:参数隐含不同的行数: 3,2

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60712039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档