R- 一行上的最小值和最大值,定义为多列

R- min and max on a row, defined to a number of columns

我有 4 个变量,每个变量一式三份,我需要在每一行中找到每个一式三份的平均值,并在此之上找到每第 5 行的最小值和最大值,以便绘制误差线。这是一个包含两个变量的示例:

  x  a1  a2  a3  b1  b2  b3
220   2   7  71  28  53  31
221   5  13  85  33  51  34

所以我需要 x=220 时 a1-a3 的平均值,依此类推,然后我需要第 1 行、第 6 行等的最小值和最大值。我想我需要这样做才能获得制作误差线所需的数据,但我是 R 的新手,所以可能有更好的方法。

可能有帮助

library(dplyr)
library(tidyr)
add_rownames(df1) %>% 
        gather(Var, Val, -x, -rowname) %>% 
        extract(Var, into='Var', '([^0-9]*).*') %>%
        group_by(rowname, x, Var) %>% 
        summarise(Mean=mean(Val), Min=min(Val), Max=max(Val))

或使用base R

 res <-  do.call(rbind, 
             lapply(split(names(df1)[-1],
                sub('\d+$', '', names(df1)[-1])), function(x) {
              x1 <- df1[x]
              data.frame(x=df1[1],Mean=rowMeans(x1), Max=do.call(pmax, x1),
                 Min=do.call(pmin, x1))}))

数据

df1 <- structure(list(x = 220:221, a1 = c(2L, 5L), a2 = c(7L, 13L), 
a3 = c(71L, 85L), b1 = c(28L, 33L), b2 = c(53L, 51L), b3 = c(31L, 
34L)), .Names = c("x", "a1", "a2", "a3", "b1", "b2", "b3"
 ), class = "data.frame", row.names = c(NA, -2L))