R - 通过循环遍历向量中的元素,将列添加到列表中的数据帧

时间:2016-10-25 23:12:00

标签: r loops dataframe apply

我正在处理多年来测量相同变量的几个数据集。我试图为每个数据集添加一个年变量,但更一般地说,我想循环遍历向量中的元素,并将每个变量添加为数据帧列表中的新列。这个问题与我的类似,但我想迭代地将向量中的每个元素添加到相应的数据帧作为新列: R - New variables over several data frames in a loop

此处的示例数据:

year <- c(1:3)
data1 <- data.frame(var1 = c(1:5))
data2 <- data.frame(var1 = c(11:15))
data3 <- data.frame(var1 = c(21:25))
data_list <- list(data1 = data1, data2 = data2, data3 = data3)

我想这样做,但想想可能还有一些方法可以循环(或者说是la laly)我还没有想到:

data1$year <- year[1]
data2$year <- year[2]
data3$year <- year[3]

由于我有多年和数据集可以合作,因此拥有更高效的解决方案会很棒。谢谢!

1 个答案:

答案 0 :(得分:0)

基于@@ thelatemail评论的完整答案:

函数Map(cbind, data_list, year=year)应该可以完成这项工作。逐步:

  • Map函数指示列表中元素的循环
  • cbind附加新创建的列
  • year = years基于向量year中的元素创建名为years的新列

有一个虚拟的例子:

# vector of values you wish to add
years <- c(1:3)     # changed to plural to indicate vector of values rather than single value

# make dummy list of dataframes
data1 <- data.frame(var1 = c(1:5))
data2 <- data.frame(var1 = c(11:15))
data3 <- data.frame(var1 = c(21:25))
data_list <- list(data1 = data1, data2 = data2, data3 = data3)

# Loop through list of dataframes and to each dataframe add a new column
Map(cbind, data_list, year=years)

您想要的输出:

$`data1`
  var1 year
1    1    1
2    2    1
3    3    1
4    4    1
5    5    1

$data2
  var1 year
1   11    2
2   12    2
3   13    2
4   14    2
5   15    2

$data3
  var1 year
1   21    3
2   22    3
3   23    3
4   24    3
5   25    3