【发布时间】:2020-02-06 01:31:23
【问题描述】:
我正在尝试分析一个数据集,其中有两个响应变量 X 和 Y 以及两个分组变量 Treatment 和 Rep:
tribble(
~Treatment, ~Rep, ~X, ~Y
, "N1", 1, 10.18, 14.38
, "N1", 2, 13.53, 14.38
, "N2", 1, 15.34, 18.28
, "N2", 2, 10.4, 7.14
, "N3", 1, 8.57, 22.57
, "N3", 2, 13.95, 19.9
, "N4", 1, 16.69, NA
, "N4", 2, 14.33, 9.32
, "N5", 1, NA, NA
, "N5", 2, 15.74, 15.39
)
我想计算每个响应变量的每个处理的平均值、sd 和 se 值。然后我想在 x 轴上制作一个带有治疗的线图; X 和 Y 各有两条线,带有置信区间误差线。
我使用 summarise_at 来计算:
df<-Data1 %>%
group_by(Treatment, Rep) %>%
summarise_at(vars(-group_cols()), list(mean = ~mean(X, Y, na.rm = TRUE),
sd = ~sd(X, Y, na.rm = TRUE),
se= ~sd(X, Y, na.rm = TRUE)/sqrt(n()))) %>%
summarise_at(vars(mean:se), mean, na.rm = TRUE)
但我收到此错误:
Error in if (trim > 0 && n) { : missing value where TRUE/FALSE needed
我不确定能否以这种方式为 summarise_at 放置两个变量。感谢您的帮助!
【问题讨论】:
-
sd()接受一个论点 -sd(X,Y)应该做什么? -
我想计算 X 和 Y 的均值、sd 和 se。即使我只输入一个参数也会出错。
-
试试这个作为第一步
Data1 %>% group_by(Treatment, Rep) %>% summarise_at(vars(X, Y), list(mean = ~mean(.x, na.rm = TRUE), sd = ~sd(.x, na.rm = TRUE), se= ~sd(.x, na.rm = TRUE)/sqrt(n())))。这些函数只需要一个参数,.x将首先获取X值,然后是Y值,因为您关注的是这两列。 -
...另外,您的示例数据集并没有多大帮助,因为每个
Treatment和Rep对都有一个值。 :) 为 2-3 个唯一对提供一些值会更好,所以mean和sd可能更有意义。
标签: r