首页 > 解决方案 > 如何将年份填充到 R 中的数据框列表中

问题描述

我有一个包含 11 个数据框的列表,并希望在每个数据框内创建一个新列,并将该列填充为c(2005:2015). 问题是它为数据框中的 255 行迭代 11 项(年),因此显示错误。我希望它不应该迭代数据框中的行,而是迭代列表中的数据框。所以第一个数据框有 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.

标签: rfunctionlapply

解决方案


这是一个简单的例子。

## 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)

推荐阅读