gpt4 book ai didi

r - 仅当同一列的组中存在另一个值时,dplyr 才对值进行过滤

转载 作者:行者123 更新时间:2023-12-04 13:20:03 24 4
gpt4 key购买 nike

我完全预料到会因为重复的问题而受到抨击,但我就是找不到类似的问题。提前道歉。

我正在尝试清理一些有时包含摘要行而有时不包含的数据。这是一个可重现的小示例:

library(tidyverse)

yr <- c(2010, 2010, 2010,
2011, 2011, 2011, 2011,
2012, 2012, 2012)

a <- c("HAY", "APPLES", "PUMPKINS",
"HAY", "HAY & HAYLAGE", "APPLES", "PUMPKINS",
"HAY & HAYLAGE", "APPLES", "PUMPKINS")

b <- c(1:10)

dat <- as_tibble(list(yr = yr, a = a, b = b))

dat %>%
group_by(yr) %>%
filter(a != "HAY" if group contains a== "HAY & HAYLAGE")

显然,最后一行代码是伪代码。在 yr = 2011 的组中,我想过滤掉 a 等于“HAY”的行。我生成的 tibble 应该有 9 行。

最佳答案

这是一种方法 - 您可以使用 if过滤条件中的语句:

library(dplyr) 

# (data from OP)
dat <- dplyr::tibble(
yr = c(2010, 2010, 2010, 2011, 2011,
2011, 2011, 2012, 2012, 2012),
a = c("HAY", "APPLES", "PUMPKINS", "HAY", "HAY & HAYLAGE",
"APPLES", "PUMPKINS", "HAY & HAYLAGE", "APPLES", "PUMPKINS"),
b = 1:10
)


dat %>%
group_by(yr) %>%
filter(if ('HAY & HAYLAGE' %in% a) a!='HAY' else TRUE) %>%
ungroup()

## result will be:
##
## # A tibble: 9 x 3
## yr a b
## <dbl> <chr> <int>
## 1 2010 HAY 1
## 2 2010 APPLES 2
## 3 2010 PUMPKINS 3
## 4 2011 HAY & HAYLAGE 5
## 5 2011 APPLES 6
## 6 2011 PUMPKINS 7
## 7 2012 HAY & HAYLAGE 8
## 8 2012 APPLES 9
## 9 2012 PUMPKINS 10

关于r - 仅当同一列的组中存在另一个值时,dplyr 才对值进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54506772/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com