假设我有3个数据框,名为a,b,c包含观察值和预测值5倍。
> a
fold observerd predicted
1 1 10 20
2 2 20 30
3 3 30 40
4 4 40 50
5 5 50 60
> b
fold observerd predicted
1 1 15 25
2 2 25 35
3 3 35 45
4 4 45 55
5 5 55 65
> c
fold observerd predicted
1 1 16 26
2 2 26 36
3 3 36 46
4 4 46 56
5 5 56 66
现在,我希望合并每个折叠的观察值和预测值,如下所示。
> d
fold observerd predicted
1 1 10 20
2 1 15 25
3 1 16 26
> e
fold observerd predicted
1 2 20 30
2 2 25 35
3 2 26 36
..etc
这里我的最终目标是确定每个折叠的观察值和预测值之间的各种统计参数(相关系数R,RMSE等)(即折叠1,R = 1,折叠2,R = 0.98像这一点)。
实际上,我总共有48个数据帧,每个数据帧包含82个数据帧。那么,我怎么能通过使用apply / loop /类似的东西来完成这项工作呢?
答案 0 :(得分:4)
我的建议是在单个data.frame中工作。然后,您可以稍后将任何计算应用于该data.frame的子部分。一种方法是使用dplyr
包。请看这里的例子。
a <- read.table(header = TRUE, text = '
fold observerd predicted
1 1 10 20
2 2 20 30
3 3 30 40
4 4 40 50
5 5 50 60')
b <- read.table(header = TRUE, text = '
fold observerd predicted
1 1 15 25
2 2 25 35
3 3 35 45
4 4 45 55
5 5 55 65')
c <- read.table(header = TRUE, text = '
fold observerd predicted
1 1 16 26
2 2 26 36
3 3 36 46
4 4 46 56
5 5 56 66')
dplyr
bind_rows
library(dplyr)
dat <- bind_rows(a, b, c, .id = 'table')
group_by
和summarize
# For example, calculate the correlation coefficient and the sum of squares per fold.
dat %>%
group_by(fold) %>%
summarize(r = cor(observerd, predicted),
ss = sum((observerd - predicted) ^ 2))
do
允许更复杂的东西(比如模型拟合)。请参阅?do
。
如果你想留在基地R,我仍然会推荐类似的方法。
rbind
dat2 <- rbind(a, b, c) # no identifier here
split
和sapply
# For example, get the correlation coefficient per fold
spl <- split(dat2, dat2$fold)
sapply(spl, function(d) cor(d$observerd, d$predicted))
(我觉得你拼错了。)