数据框列表中行的总和和平均值
sum and average of rows from list of data frames
我有兴趣对数据框列表中的每一行求和。即第一行需要在列表中的所有数据框中求和。同样,第二等。
添加完成后,我想根据列表中的数据帧数取平均值。我用下面的代码(乏味)
sample_list<-list(data.frame(x=c(1:5)),data.frame(x=c(6:10)), data.frame(x=c(11:15)) ) ## sample data frame's list
sum_per_person<-matrix(nrow=nrow(sample_list[[1]]),ncol=1) ## create a matrix to store sum of each row from the list of data frames.
number_indi=nrow(sample_list[[1]]) ## number of rows are same in each data frame within the list
iterate_person=1 ## set counter
while(iterate_person<=number_indi){ ## do a while loop
sum_temp=0 ## set to zero
for(x in 1:length(sample_list)){
## iterate over the sample list
sum_temp<-sum_temp+(sample_list[[x]])[iterate_person,]
} ## iteration ends for the list
sum_per_person[iterate_person,1]<-sum_temp
iterate_person<-iterate_person+1 ## increment
} ## for loop ends
## take average
sum_per_person<-sum_per_person/length(sample_list) ## final result
有没有一种方法可以通过 lapply、应用以简单的方式完成此操作?
而不是 while
循环,R
中的一个选项是获取 list
的对应元素与 Reduce
的总和,然后除以 [= 'sample_list'
的 16=]
Reduce(`+`, sample_list)/length(sample_list)
# x
#1 6
#2 7
#3 8
#4 9
#5 10
或者一个简洁的做法是rowMeans
转换成单个data.frame
rowMeans(do.call(cbind, sample_list))
我有兴趣对数据框列表中的每一行求和。即第一行需要在列表中的所有数据框中求和。同样,第二等。 添加完成后,我想根据列表中的数据帧数取平均值。我用下面的代码(乏味)
sample_list<-list(data.frame(x=c(1:5)),data.frame(x=c(6:10)), data.frame(x=c(11:15)) ) ## sample data frame's list
sum_per_person<-matrix(nrow=nrow(sample_list[[1]]),ncol=1) ## create a matrix to store sum of each row from the list of data frames.
number_indi=nrow(sample_list[[1]]) ## number of rows are same in each data frame within the list
iterate_person=1 ## set counter
while(iterate_person<=number_indi){ ## do a while loop
sum_temp=0 ## set to zero
for(x in 1:length(sample_list)){
## iterate over the sample list
sum_temp<-sum_temp+(sample_list[[x]])[iterate_person,]
} ## iteration ends for the list
sum_per_person[iterate_person,1]<-sum_temp
iterate_person<-iterate_person+1 ## increment
} ## for loop ends
## take average
sum_per_person<-sum_per_person/length(sample_list) ## final result
有没有一种方法可以通过 lapply、应用以简单的方式完成此操作?
而不是 while
循环,R
中的一个选项是获取 list
的对应元素与 Reduce
的总和,然后除以 [= 'sample_list'
Reduce(`+`, sample_list)/length(sample_list)
# x
#1 6
#2 7
#3 8
#4 9
#5 10
或者一个简洁的做法是rowMeans
转换成单个data.frame
rowMeans(do.call(cbind, sample_list))