簡體   English   中英

如何在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

我想按組執行一些更復雜的算術以特定於 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM