【问题标题】:R- min and max on a row, defined to a number of columnsR- 一行上的最小值和最大值,定义为多列
【发布时间】:2015-07-02 15:15:21
【问题描述】:

我有 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 新手,所以可能有更好的方法。

【问题讨论】:

  • 您提到了row 6,但示例中只有两行。如果您使用预期的输出更新帖子,会更容易。

标签: r max average minimum


【解决方案1】:

这可能有帮助

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))

【讨论】:

  • 我使用 mutate (dplyr) 使它工作。谢谢你的回答。
猜你喜欢
  • 2014-12-01
  • 2015-01-09
  • 1970-01-01
  • 2020-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-12
相关资源
最近更新 更多