【发布时间】:2017-05-25 16:29:45
【问题描述】:
如果我有一个包含 2 个因子(a 和 b)、2 个水平(1 和 2)和 1 个变量 (x) 的简单数据框,我如何获得 x 的中值:每个因子水平的中值 x a,因子 b 的每个水平,以及 a*b 的每个组合?
library(dplyr)
df <- data.frame(a = as.factor(c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2)),
b = as.factor(c(1,1,1,1,2,2,2,2,1,1,1,1,2,2,2,2)),
x = c(runif(16)))
我尝试了各种(许多)版本:
df %>%
group_by_(c("a", "b")) %>%
summarize(med_rate = median(df$x))
每个因子 a 水平的中位数 x 的结果应如下所示:
中位数
1 0.58811
2 0.53167
对于因子 b 的每个水平的中位数 x 如下所示:
b 中位数
1 0.60622
2 0.46096
对于 a 和 b 的每个组合的中位数 x 如下所示:
a b 中位数
1 1 0.66745
1 2 0.34656
2 1 0.50903
2 2 0.55990
提前感谢您的帮助。
【问题讨论】:
-
从
summarise中取出df$ -
你不需要引号,你可以使用
group_by,即df %>% group_by(a, b) %>% summarize(med_rate = median(x)) -
谢谢。但这给了我一个中值; 16 次观测的中位数 x。它没有给我每个因素(a 和 b)的每个级别(1 和 2)以及每个 a*b 组合的每个级别的中值。
-
@DavidG 它确实给了我每个级别的中位数,即。 4 个值。也许你也加载了
plyr库。试试df %>% group_by(a, b) %>% dplyr::summarize(med_rate = median9x)) -
是的!非常感谢!
标签: r dplyr combinations summarize