[英]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
我想按組執行一些更復雜的算術以特定於 mroe 我想計算以下操作:
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 無法將其識別為 function。 當然,一種解決方案是應用 summarise function 按組計算所有均值和觀察計數,將它們放入新數據框中,然后逐行執行上述計算,但是有沒有更有效的方法呢?
您可以使用dplyr's mutate
function:
library(dplyr)
df %>%
group_by(district) %>%
mutate(calculation = n() * (mean(mean1) - mean(mean2))/sqrt(mean(var)))
返回
# 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")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.