将新列添加到数据框列表

时间:2019-07-02 15:40:59

标签: r loops dplyr lapply

我正在从大量文件中清除从excel导入的一些数据,并且在导入过程中必须根据文件名的下标创建两个键。文件是按国家导入的。我设法将文件导入到单独的数据框中,但是在创建新变量时遇到了困难。为简便起见,我将country =“ usa”和year = 1980设置为

我的第一个想法是通过过滤模式“ USA”来创建环境中存在的数据帧的列表。但是,这是较差的样式,产品似乎是一个字符列表,未与数据框本身连接。

usadflist <- Filter(is.data.frame, mget(ls(pattern="USA")))

这是我转向使用dplyr :: mutate()调整实际导入的时间,但是无法指定尚未创建的变量,也就是我尝试cbind()时,如下所示:

usalist <- list.files(path ="~/Desktop/reports/usa")

for(i in usalist) {
  assign(paste(i),read_excel(path = paste("Desktop/reports/usa/",i,sep="")))
  cbind(usalist[[i]][country]<-"usa", usalist[[i]][year]<-1980)
}

给出错误消息:*tmp* [[i]]中的错误:下标超出范围。

我希望每个数据框都将有一个新变量:country(国家),值“美国”;变量:year(年值)1980。我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

您是否尝试过以下方法:

usalist <- list.files(path ="~/Desktop/reports/usa")

for(i in 1:length(usalist)){
  df <- read_excel(path = paste("Desktop/reports/usa/", usalist[i], sep = ""))
  df$country <- "usa"
  df$year <- 1980L
  assign(usalist[i], df); rm(df)
}; rm(i)

没有运行它,所以我不能说我是否没有误输入错字。