下面是我的例子,让我解释一下我正在try 做什么,尽管它并没有像我希望的那样工作.

我需要找到同一个人在同一天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行应该删除,因为即使同一个人在同一日期有两个唯一的z值,它也不包括"C"或"B".

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

第4行、第5行和第6行都应该保留,因为该person、date组合有三个唯一的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相关问答推荐

使用gggplot 2在R中正确表示翻转堆叠条形图中的数据

R:对于没有数据的缓冲区,加权平均值为0

使用na.locf在长格式数据集中输入具有多个时间点的数据集

导入到固定列宽的R中时出现问题

在数据表中呈现数学符号

使用ggcorrplot在相关性矩阵上标注supertitle和index标签

使用对管道内单元格的引用生成新变量

编辑文件后编辑RhandsonTable

如何自定义Shapviz图?

将向量组合到一个数据集中,并相应地命名行

lightgbm发动机在tidymmodels中的L1正则化""

在嵌套列表中查找元素路径的最佳方法

解析嵌套程度极高的地理数据

R中时间间隔的大向量与参考时间间隔的相交

层次树图的数据树

如何在使用Alpha时让geom_curve在箭头中显示恒定透明度

如何判断代码是否在R Markdown(RMD)上下文中交互运行?

用满足特定列匹配的另一行替换NA行

变异以按组从其他列创建具有最大和最小值的新列

Data.table::Shift type=允许扩展数据(&Q;LAG&Q;)