如何将Years填充到R中的数据框列表中

时间:2019-06-15 13:09:55

标签: r function lapply

我有一个包含11个数据框的列表,并且想要在每个数据框内创建一个新列,并用c(2005:2015)作为年份填充该列。问题是,它在一个数据帧中为255行迭代11个项目(年),因此显示错误。我想要的是它不应该迭代数据帧中的行,而应该迭代具有in列表的数据帧。因此,第一个数据框具有255行的Year,显示值为2005,依此类推。

我尝试了以下代码,但正如我所说。它在数据框中进行迭代,而不是我希望它在每个数据框中仅填充一个值,并在列表中而不是在下面的一级进行迭代。

tf2 <- lapply(tf2, function(x) mutate(x, YEAR = c(2005:2015)))

注意:mutate不能直接应用于类list的对象。

我正在尝试类似的新内容,但是我的代码是错误的,需要更正。

year <- c(2005:2015)

ChangeYears = function(x)
  {
  for i in 1:length(tf2)
  {
    x[i] <- lapply(mutate(YEAR = c(year[i])))
  }
  }

tf2 <- lapply(tf2, ChangeYears)

基于@GSW建议的修改,我正在尝试

ChangeYears = function(x){
  for(i in 1:11) {
    x[[i]] = cbind(x[[i]], Year=2004+i) }

}

lapply(tf2, ChangeYears)

但是出现以下错误。 Error in .subset2(x, i, exact = exact) : subscript out of bounds

1 个答案:

答案 0 :(得分:1)

这是一个简单的例子。

## A list of 11 data frames
tf2 = list()
for(i in 1:11) {
    tf2[[i]] = data.frame(x = rnorm(10), y = rnorm(10)) }


## Add a year column to each. 
for(i in 1:11) {
    tf2[[i]] = cbind(tf2[[i]], Year=2004+i) }

添加:

这将修改您建议的功能,使其起作用。

ChangeYears = function(x){
  for(i in 1:11) {
    x[[i]] = cbind(x[[i]], Year=2004+i) }
  x
}

tf2 = ChangeYears(tf2)