gpt4 book ai didi

r - group_by 和过滤器删除了太多行

转载 作者:行者123 更新时间:2023-12-05 02:31:06 24 4
gpt4 key购买 nike

下面是我的示例,让我解释一下我正在尝试做的事情,尽管它并没有像我想要的那样工作。

我需要找到同一个人在同一日期的 z 列中有 2 个以上唯一值的所有实例。但是,我需要找到 z 列中特定值列表的位置。

library(tidyverse)

x <- c("Person A","Person A","Person A","Person A","Person A","Person A")
y <- c("2022-01-01","2022-01-01","2022-01-20","2022-02-01","2022-02-01","2022-02-01")
z <- c("A","D","A","A","C","B")

df <- data.frame(x,y,z)
df

df %>%
group_by(x,y) %>%
mutate(unique_z = n_distinct(z)) %>%
# ungroup() %>%
filter(unique_z > 1,
z %in% c("C","B"))

下面是我想要输出的图像,但我无法弄清楚。

应该删除第 1 行和第 2 行,因为即使它是同一个人在同一日期的 2 个唯一的 z 值,它也不包括“C”或“B”。

第 3 行被删除,因为它只是那个人和日期的一个唯一值。

第 4、5 和 6 行都应该保留,因为那个人、日期组合具有三个唯一的 z 值。此外,“C”和/或“B”出现在这些行中。出于某种原因,第 4 行每次都被删除。我要查看那个人的其他 z 值,日期组合。我认为分组和过滤可以做到这一点,但它似乎不是我这样做的方式。

最佳答案

您需要使用 any 来检查每个组中是否存在 c("B", "C") 而不是在每一行中;见下文:

library(dplyr)

df %>%
group_by(x,y) %>%
mutate(unique_z = n_distinct(z)) %>%
filter(unique_z > 1,
any(z %in% c("B","C")))
## any(z %in% c("C")) & any(z %in% c("B")))
## use this one instead if you want B and C present at the same time ...
## ... and two B's or two C's are not desired

# # A tibble: 3 x 4
# # Groups: x, y [1]
# x y z unique_z
# <fct> <fct> <fct> <int>
# 1 Person A 2022-02-01 A 3
# 2 Person A 2022-02-01 C 3
# 3 Person A 2022-02-01 B 3

关于r - group_by 和过滤器删除了太多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71666388/

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