如何在 R 中按组执行复杂的代数运算?
How to perform complex algebraic operation by group in R?
我的数据框 mydata
如下所示:
city district mean1 mean2 var
alpha A 1 2 0.5
beta A 3 1 0.2
gamma B 1.5 1 1
zeta B 2 0 3
...
omega C 1 1 2
我想按组执行一些更复杂的算术来具体化我想计算以下操作:
sqrt(n(mydata))*((mean(mydata$mean1)-mean(mydata$mean2))/sqrt(mean(mydata$var))
我用 dplyr 尝试过这样的事情:
resutl<-mydata %>%
group_by(district) %>%
sqrt(n(mydata))*((mean(mydata$mean1)-mean(mydata$mean2))/sqrt(mean(mydata$var))
然而,上面的方法并没有起作用,因为dplyr 没有将它识别为一个函数。当然,一种解决方案是应用 summarize 函数按组计算所有均值和观察计数,将它们放入新数据框中,然后按行执行上述计算,但是有没有更有效的方法呢?
您可以使用 dplyr's mutate
函数:
library(dplyr)
df %>%
group_by(district) %>%
mutate(calculation = n() * (mean(mean1) - mean(mean2))/sqrt(mean(var)))
returns
# A tibble: 5 x 6
# Groups: district [3]
city district mean1 mean2 var calculation
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 alpha A 1 2 0.5 1.69
2 beta A 3 1 0.2 1.69
3 gamma B 1.5 1 1 1.77
4 zeta B 2 0 3 1.77
5 omega C 1 1 2 0
注意:我不确定您是需要整个数据集的长度还是只需要子集的长度。在第一种情况下,将 n()
替换为 length(df)
。
数据
df <- readr::read_table2("city district mean1 mean2 var
alpha A 1 2 0.5
beta A 3 1 0.2
gamma B 1.5 1 1
zeta B 2 0 3
omega C 1 1 2")
我的数据框 mydata
如下所示:
city district mean1 mean2 var
alpha A 1 2 0.5
beta A 3 1 0.2
gamma B 1.5 1 1
zeta B 2 0 3
...
omega C 1 1 2
我想按组执行一些更复杂的算术来具体化我想计算以下操作:
sqrt(n(mydata))*((mean(mydata$mean1)-mean(mydata$mean2))/sqrt(mean(mydata$var))
我用 dplyr 尝试过这样的事情:
resutl<-mydata %>%
group_by(district) %>%
sqrt(n(mydata))*((mean(mydata$mean1)-mean(mydata$mean2))/sqrt(mean(mydata$var))
然而,上面的方法并没有起作用,因为dplyr 没有将它识别为一个函数。当然,一种解决方案是应用 summarize 函数按组计算所有均值和观察计数,将它们放入新数据框中,然后按行执行上述计算,但是有没有更有效的方法呢?
您可以使用 dplyr's mutate
函数:
library(dplyr)
df %>%
group_by(district) %>%
mutate(calculation = n() * (mean(mean1) - mean(mean2))/sqrt(mean(var)))
returns
# A tibble: 5 x 6
# Groups: district [3]
city district mean1 mean2 var calculation
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 alpha A 1 2 0.5 1.69
2 beta A 3 1 0.2 1.69
3 gamma B 1.5 1 1 1.77
4 zeta B 2 0 3 1.77
5 omega C 1 1 2 0
注意:我不确定您是需要整个数据集的长度还是只需要子集的长度。在第一种情况下,将 n()
替换为 length(df)
。
数据
df <- readr::read_table2("city district mean1 mean2 var
alpha A 1 2 0.5
beta A 3 1 0.2
gamma B 1.5 1 1
zeta B 2 0 3
omega C 1 1 2")