R 无法引用摘要中的分组数据(跨(…)
当我尝试在R 无法引用摘要中的分组数据(跨(…),r,dplyr,group-by,tidyverse,R,Dplyr,Group By,Tidyverse,当我尝试在summary()中创建多个列时,我可以在同一个summary语句中引用新创建的列名 例如: 目标:尝试根据标准偏差(“sd”)计算标准误差(“se”) 步骤1(开始为se分配sd): 返回 style score_mean score_sd score_se * <fct> <dbl> <dbl> <dbl> 1 S1 3.5 0.707 0.707 Error: Proble
summary()
中创建多个列时,我可以在同一个summary语句中引用新创建的列名
例如:
目标:尝试根据标准偏差(“sd”)计算标准误差(“se”)
步骤1(开始为se分配sd):
返回
style score_mean score_sd score_se
* <fct> <dbl> <dbl> <dbl>
1 S1 3.5 0.707 0.707
Error: Problem with `summarise()` input `..1`.
x non-numeric argument to binary operator
ℹ Input `..1` is `across(score, list(mean = mean, sd = sd, se = sd/sqrt(nrow(data))))`.
ℹ The error occured in group 1: style = "S1".
返回
style score_mean score_sd score_se
* <fct> <dbl> <dbl> <dbl>
1 S1 3.5 0.707 0.707
Error: Problem with `summarise()` input `..1`.
x non-numeric argument to binary operator
ℹ Input `..1` is `across(score, list(mean = mean, sd = sd, se = sd/sqrt(nrow(data))))`.
ℹ The error occured in group 1: style = "S1".
步骤3调试任务期限
3a)分组数据参考
我将nrow(score))
中的分组数据替换为其他列名,甚至nrow(data)
,但它们都会导致相同的错误消息
3b)分配操作
我将sesd/sqrt(nrow(score))
的赋值替换为不同的变量,导致了相同的错误。最简单的是sd/2,所以即使除以常数也不起作用
3c)分配参考
我将sd
替换为score\u sd
,以引用创建的新列,如输出中所示(步骤1)。仍然显示相同的错误消息
问题:为什么第一步有效而第二步无效?
错误消息只引用整个cross()
语句,因此无助于缩小根本原因
我的直觉是我必须以某种方式引用分组数据,但我尝试了
se=sd(.)/sqrt(nrow(data)
没有成功
如有任何提示,我将不胜感激
最小可复制示例:
data <- structure(list(style = structure(c(1L, 2L, 3L, 4L, 5L, 1L, 2L,
3L, 4L, 5L), .Label = c("S1", "S2", "S3", "S4", "S5"), class = "factor"),
param = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L
), .Label = c("A", "B", "C"), class = "factor"), score = c(4,
1, 1, 3, 3, 3, 5, 1, 1, 1)), row.names = c(NA, -10L), class = c("tbl_df",
"tbl", "data.frame"))
data经过多次尝试和出错后,我自己找到了解决方案。这是为每个还不熟悉跨函数的的人准备的,因为dplyr 1.0.0
尚未发布
因此,我的问题的答案是:
必须通过
运算符引用分组数据-但仅当使用purrr
公式运算符~
时
但是,不能在n()
函数中引用分组数据,因为n()
不接受
运算符
第二点需要无数次的尝试才能找到,这就是我想分享这个解决方案的原因
您可能无法直观地理解这一点,即使用括号定义了n()
,也不允许使用
运算符,因为它总是引用分组数据
这就是这个双重把戏的样子:
data %>%
group_by(style) %>%
summarise(across(
score,
list(mean = mean, sd = sd, se = ~sd(.)/sqrt(n()))
))
如果你知道的话,这很容易:-)经过多次尝试,我自己找到了解决方案。这适用于尚未熟悉跨功能的所有人,因为dplyr 1.0.0
尚未发布
因此,我的问题的答案是:
必须通过
运算符引用分组数据-但仅当使用purrr
公式运算符~
时
但是,不能在n()
函数中引用分组数据,因为n()
不接受
运算符
第二点需要无数次的尝试才能找到,这就是我想分享这个解决方案的原因
您可能无法直观地理解这一点,即使用括号定义了n()
,也不允许使用
运算符,因为它总是引用分组数据
这就是这个双重把戏的样子:
data %>%
group_by(style) %>%
summarise(across(
score,
list(mean = mean, sd = sd, se = ~sd(.)/sqrt(n()))
))
如果你知道的话,这很容易:-)