如何使用 R data.frame 的多列求平均值?

How to find mean value using multiple columns of a R data.frame?

我试图为每一行找到 ABmean 并将其另存为 column 但似乎只有代码 average first row 并用该值填充 rows 的其余部分。有什么解决方法的建议吗?

library(tidyverse)
library(lubridate)

set.seed(123)

DF <- data.frame(Date = seq(as.Date("2001-01-01"), to = as.Date("2003-12-31"), by = "day"), 
                 A = runif(1095, 1,60),
                 Z = runif(1095, 5,100)) %>% 
      mutate(MeanofAandZ= mean(A:Z))

你在找这个吗:

DF %>% rowwise() %>% mutate(MeanofAandZ = mean(c_across(A:Z)))
# A tibble: 1,095 x 4
# Rowwise: 
   Date           A     Z MeanofAandZ
   <date>     <dbl> <dbl>       <dbl>
 1 2001-01-01 26.5   7.68        17.1
 2 2001-01-02 54.9  33.1         44.0
 3 2001-01-03 37.1  82.0         59.5
 4 2001-01-04  6.91 18.0         12.4
 5 2001-01-05 53.0   8.76        30.9
 6 2001-01-06 26.1   7.63        16.9
 7 2001-01-07 59.3  30.8         45.0
 8 2001-01-08 39.9  14.6         27.3
 9 2001-01-09 59.2  93.6         76.4
10 2001-01-10 30.7  89.1         59.9

你可以用 Base R 来做:rowMeans

完整基础 R:

DF$MeanofAandZ <- rowMeans(DF[c("A", "Z")])
head(DF)
#>         Date         A        Z MeanofAandZ
#> 1 2001-01-01 17.967074 76.92436    47.44572
#> 2 2001-01-02 47.510003 99.28325    73.39663
#> 3 2001-01-03 25.129638 64.33253    44.73109
#> 4 2001-01-04 53.098027 32.42556    42.76179
#> 5 2001-01-05 56.487570 23.99162    40.23959
#> 6 2001-01-06  3.687833 81.08720    42.38751

mutate 内:

library(dplyr)
DF <- DF %>% mutate(MeanofAandZ = rowMeans(cbind(A,Z)))
head(DF)
#>         Date         A        Z MeanofAandZ
#> 1 2001-01-01 17.967074 76.92436    47.44572
#> 2 2001-01-02 47.510003 99.28325    73.39663
#> 3 2001-01-03 25.129638 64.33253    44.73109
#> 4 2001-01-04 53.098027 32.42556    42.76179
#> 5 2001-01-05 56.487570 23.99162    40.23959
#> 6 2001-01-06  3.687833 81.08720    42.38751

我们也可以

DF$MeanofAandZ <- Reduce(`+`, DF[c("A", "Z")])/2

或使用apply

DF$MeanofAandZ <- apply(DF[c("A", "Z")], 1, mean)