![](/img/trans.png)
[英]Removing rows from a table based off values in another conditional on a value in a separate column using base 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_collapse
的forcats
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.