簡體   English   中英

使用 r 以另一列中的值為條件聚合行中的值

[英]Aggregate values in rows conditional on values in another column using r

我的數據如下所示:

Moves <- c(0, 1, 2, 3, 4, 5, 6)
Men <- c(0.5, 0.3, 0.1, NA, 0.05, 0.05, NA)
Women <- c(0.4, 0.5, NA, NA, NA, 0.05, 0.05)

df <- tibble(Moves, Men, Women)

現在,我想在 Men 和 Women 列中匯總移動次數等於 3 或更多的行中的值。 所以我希望數據看起來像這樣:

Moves Men Women
0     0.5 0.4
1     0.3 0.5
2     0.1 NA
≥3    0.1 0.1

我在弄清楚如何做到這一點時遇到了一些問題。 大多數關於相關問題的帖子都是關於如何在列之間聚合值,但在這里我想根據條件在列中進行聚合。

我們可以使用case_when將大於或等於 3 的 'Moves' 更改為>=3 ,將其用作分組變量並summarise其他列

library(dplyr)
df %>%
    group_by(Moves = factor(case_when( Moves >=3 ~ '>=3', 
       TRUE ~ as.character(Moves)), levels = c('0', '1', '2', '>=3'))) %>%
     summarise(across(everything(),  ~ if(all(is.na(.))) NA_real_ 
           else sum(., na.rm = TRUE)), .groups = 'drop')

-輸出

# A tibble: 4 x 3
#  Moves   Men Women
#  <fct> <dbl> <dbl>
#1 0       0.5   0.4
#2 1       0.3   0.5
#3 2       0.1  NA  
#4 >=3     0.1   0.1

或者使用來自fct_collapseforcats

library(forcats)
df %>% 
  group_by(Moves = fct_collapse(as.character(Moves), 
  `>=3` = as.character(Moves[Moves >=3]))) %>% 
  summarise(across(everything(),  ~ if(all(is.na(.))) NA_real_  
        else sum(., na.rm = TRUE)), .groups = 'drop')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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