[英]Conditional statements within groups in dplyr
使用 dplyr 我想使用條件語句總結數據集中的組,其中 a 中存在兩個條件觸發 TRUE 值,所有其他排列觸發 FALSE。 最好用一個例子來說明。 假設我們有一個數據集,其中每個 id 號內都有一個分類變量的多個觀察值
df <- data.frame(id = factor(c(1, 2, 2, 3, 3, 4, 4)),
l = factor(c("a", "a", "b", "a", "c", "b", "d")))
df
# id l
# 1 1 a
# 2 2 a
# 3 2 b
# 4 3 a
# 5 3 c
# 6 4 b
# 7 4 d
現在說我希望僅當 id 組中同時包含a
和c
時才會出現 TRUE。
如果 id 組a
OR c
,我可以創建一個返回 TRUE 的條件,使用 dplyr 中的any()
function
df %>%
group_by(id) %>%
summarise(ab = any(l %in% c("a", "c")))
# id ab
# <fct> <lgl>
# 1 1 TRUE
# 2 2 TRUE
# 3 3 TRUE
# 4 4 FALSE
在any()
的文檔中,它說all()
做相反的事情。
library(dplyr)
df %>%
group_by(id) %>%
summarise(ab = all(l %in% c("a", "c")))
# id ab
# <fct> <lgl>
# 1 1 TRUE
# 2 2 FALSE
# 3 3 TRUE
# 4 4 FALSE
這很接近但不太正確,因為 id 號 1 只有一個觀察結果,因此不能同時滿足這兩個條件。
誰能提出解決方案?
反轉%in%
語句。
您想知道c("a", "c")
的“所有”是否在組中,而不是所有組是否都在c("a", "c")
df %>%
group_by(id) %>%
summarise(ab = all(c("a", "c") %in% l))
#> # A tibble: 4 x 2
#> id ab
#> <fct> <lgl>
#> 1 1 FALSE
#> 2 2 FALSE
#> 3 3 TRUE
#> 4 4 FALSE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.