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