![](/img/trans.png)
[英]Apply dplyr function which contains "group_by" to multiple columns
[英]dplyr: group_by, sum various columns, and apply a function based on grouped row sums?
我正在嘗試使用 dplyr 來總結森林中鳥類物種豐度的 dataframe,這些鳥類在某種程度上是支離破碎的。
第一列 percent_cover 有 4 個可能的值:10、25、50、75。然后有十列鳥類數量:“species1”到“species10”。
我想按 percent_cover 分組,然后對其他列求和,並將這些總和計算為 4 行總和的百分比。
要獲得列總和很容易:
%>% group_by(Percent_cover) %>% summarise_at(vars(contains("species")), sum)
...但我需要的是 sum/rowSum*100。 似乎需要某種“逐行”操作。
另外,出於興趣,為什么以下不起作用?
%>% group_by(Percent_cover) %>% summarise_at(vars(contains("species")), sum*100)
在這一點上,go 回到“for”循環是很誘人的......
要使用dplyr
,請嘗試以下操作:
library(dplyr)
df %>%
group_by(Percent_cover) %>%
summarise(across(contains("species"), sum)) %>%
mutate(rs = rowSums(select(., contains("species")))) %>%
mutate(across(contains('species'), ~./rs * 100)) -> result
result
例如,使用mtcars
:
mtcars %>%
group_by(cyl) %>%
summarise(across(disp:wt, sum)) %>%
mutate(rs = rowSums(select(., disp:wt))) %>%
mutate(across(disp:wt, ~./rs * 100))
# cyl disp hp drat wt rs
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 4 54.2 42.6 2.10 1.18 2135.
#2 6 58.7 39.2 1.15 0.998 2186.
#3 8 62.0 36.7 0.567 0.702 7974.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.