我在 R 中有这个列表(我只能访问该列表 - 而不是 d1、d2、d3、d4...我只是将这些包含在内以使这个 stackoverflow 问题可重现):
d1 = data.frame(v1 = rnorm(20,20,20), c2 = rnorm(20,20,20), id = 1:20)
d2 = data.frame(v1 = rnorm(20,20,20), c2 = rnorm(20,20,20), id = 1:20)
d3 = data.frame(v1 = rnorm(20,20,20), c2 = rnorm(20,20,20), id = 1:20)
d4 = data.frame(v1 = rnorm(20,20,20), c2 = rnorm(20,20,20), id = 1:20)
my_list = list(d1,d2, d3, d4)
我想创建一个新的数据框(20行,2列),其中包含每个id的v1和c2的平均值。我尝试了这段代码:
final_data = data.frame(mean_v1 = mean(my_list[[1]][1] + my_list[[2]][1] + my_list[[3]][1] + my_list[[4]][1]), mean_c2 = mean(my_list[[1]][2] + my_list[[2]][2] + my_list[[3]][2] + my_list[[4]][2]))
但这给了我一条警告消息和一个空结果:
Warning messages:
1: In mean.default(my_list[[1]][1] + my_list[[2]][1] + my_list[[3]][1], :
argument is not numeric or logical: returning NA
2: In mean.default(my_list[[1]][2] + my_list[[2]][2] + my_list[[3]][2], :
argument is not numeric or logical: returning NA
> final_data
mean_v1 mean_c2
1 NA NA
- 有没有更好的方法来完成这个工作,并且不需要手动编写
my_list[]
一次又一次?
最后,这看起来像这样:
mean_v1 mean_c2 id
1 37.1730736 49.3012881 1
2 -0.7861481 -9.5201620 2
3 47.2629669 -4.0249373 3
4 -25.4266542 16.6597656 4
5 18.1102329 15.0924825 5
6 -7.7148600 21.0085447 6
7 37.2753666 21.7701739 7
8 53.5393623 0.2115059 8
9 12.2578949 -11.6501821 9
10 18.3532267 44.0709866 10
11 -0.7528975 15.0990824 11
12 12.8841962 25.8737362 12
13 43.1026041 16.5399091 13
14 -1.6249458 39.6677542 14
15 23.4145601 33.0496240 15
16 -6.8168808 7.8944851 16
17 -18.8746847 16.3386228 17
18 32.8151604 14.7895162 18
19 -0.3587592 -3.2358145 19
20 11.7361017 -3.5663637 20
谢谢你!