在列表中的每个数据框的列中查找错误

时间:2017-08-20 23:13:34

标签: r list lapply

我有一个存储在列表 c 中的数据框列表。我想找到列之间的差异,例如(actual-pred1.a,actual-pred2.a,依此类推)列表中的每个数据帧。我在列表中有100个数据帧,我必须这样做。我在下面编写了以下示例数据和代码来查找它。

a<-data.frame(pred1.a=c(4,3,32,2,3), pred2.a=c(5,3,2,6,22),pred3.a=c(3,2,7,1,23),actual=c(8,9,2,6,21))
b<-data.frame(pred1.b=c(3,6,6,2,5), pred2.b=c(2,7,8,4,23),pred3.b=c(1,4,7,3,22),actual=c(9,2,1,3,25))

c<-list(a,b)

i3<-1:3
error <- list()

for (iter in 1:length(c)){
  for (i in seq_along(i3)){
    error<-sqrt(mean((c[[iter]][4]-c[[iter]][i])^2))
  }
}

我想要错误值,例如错误[[1]] [1](dataframe1的错误值:actual-pred1.a),错误[[1]] [2],错误[[1]] [3] ,错误[[2]] [1]。

有没有办法取消上市?因为我有一个包含近100个数据帧的列表。

1 个答案:

答案 0 :(得分:1)

对@ RichScriven进行一些细微更改的建议很容易在单独的列中获取错误,保持原件不变:

df_list <- list(a,b)

lapply(df_list, function(df) {
    errors = df$actual - df[1:3]
    colnames(errors) = paste0("err_", colnames(df)[1:3])
    cbind(df, errors)
    }
)

输出:

[[1]]
  pred1.a pred2.a pred3.a actual err_pred1.a err_pred2.a err_pred3.a
1       4       5       3      8           4           3           5
2       3       3       2      9           6           6           7
3      32       2       7      2         -30           0          -5
4       2       6       1      6           4           0           5
5       3      22      23     21          18          -1          -2

[[2]]
  pred1.b pred2.b pred3.b actual err_pred1.b err_pred2.b err_pred3.b
1       3       2       1      9           6           7           8
2       6       7       4      2          -4          -5          -2
3       6       8       7      1          -5          -7          -6
4       2       4       3      3           1          -1           0
5       5      23      22     25          20           2           3

如上所述c不是变量的好名字,所以我在这里重命名了。