我有一个包含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
。
答案 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)