R:将计算列添加到数据帧列表中

时间:2017-06-23 15:26:26

标签: r list dataframe apply

我有两个数据框列表。我想在第一个列表上做一些计算,然后将结果应用到第二个列表

# first list
df1 <- data.frame(id=1:5, score=c(rep(1, 3), rep(0, 2)))  
df2 <- data.frame(id=1:5, score=c(rep(1, 4), rep(0, 1)))
df1
   id score
1  1     1
2  2     1
3  3     1
4  4     0
5  5     0

df2
id score
1  1     1
2  2     1
3  3     1
4  4     1
5  5     0

list1 <- list(df1, df2)

# second list
df3 <- data.frame(id =1 :3)  
df4 <- data.frame(id =1 :4)    
list2 <- list(df3, df4)

我计算list1中每个数据帧的分数:

scores <- sapply(list1, function(df) sum(select(df, score))/nrow(df) )  
scores
[1] 0.6 0.8

现在我想用分数更新list2中的数据帧,以获得以下结果:第一个分数应用于第一个数据帧,第二个分数应用于第二个,依此类推。

df3
  id   score
1  1   0.6
2  2   0.6
3  3   0.6 

df4
  id   score
1  1   0.8
2  2   0.8
3  3   0.8
4  4   0.8 

我尝试在list2上使用lapply,我正在考虑

的内容
list2 <- lapply(list2, function(df){ df$score <- 1; df})  

显然使用适当的分数而不是1.这会更新列表中的dfs,但是 a)我无法更新数据帧df3和df4。 b)我无法看到如何将计算得分传递给lapply函数

帮助表示感谢。 TIA。

1 个答案:

答案 0 :(得分:3)

我们可以使用Map

Map(cbind, list2, score = scores)
相关问题