R 以长格式筛选具有相同ID的对象
我有一个拥有数千个样本(行)和数千个对象(列)的数据集,其中条目是不同的属性,每个条目有多个属性(我知道,不是很整洁)。 现在我不得不切换到长格式,只剩下四个列。之前,我可以很容易地过滤样品,满足几个条件 在长格式中有一个问题,例如,如果我想过滤所有对象O1,它们是红色福特。在宽格式中,我可以简单地添加一个AND条件,但在较长的时间内,我必须使用OR条件来表示汽车和颜色,但随后我将获得仅满足一个条件的样本R 以长格式筛选具有相同ID的对象,r,dplyr,R,Dplyr,我有一个拥有数千个样本(行)和数千个对象(列)的数据集,其中条目是不同的属性,每个条目有多个属性(我知道,不是很整洁)。 现在我不得不切换到长格式,只剩下四个列。之前,我可以很容易地过滤样品,满足几个条件 在长格式中有一个问题,例如,如果我想过滤所有对象O1,它们是红色福特。在宽格式中,我可以简单地添加一个AND条件,但在较长的时间内,我必须使用OR条件来表示汽车和颜色,但随后我将获得仅满足一个条件的样本 df%dplyr::filter((对象==“O1”&属性==“颜色”&值==“红色”)|
df%dplyr::filter((对象==“O1”&属性==“颜色”&值==“红色”)|
对象==“O1”和属性==“汽车”和值==“福特”)
现在我还将得到颜色为红色的样品,但是,这辆车不是For和vice verta
有没有一种方法可以在不连接两个过滤表的情况下执行此操作
PS:因为我想在一个闪亮的应用程序中创建一个动态搜索,所以我不能简单地按样本分组并检查计数是否为2。似乎你不必区分颜色和汽车(假设你没有一种叫福特的颜色或一种叫红色的汽车)。当对象为
O1
时,您可以选择值为红色
或福特
,即
df %>%
filter(value %in% c('red', 'Ford') & object == 'O1')
# sample object property value
#1 A O1 Color red
#2 A O1 Car Ford
#3 B O1 Car Ford
#4 C O1 Color red
我可能想得太多了,但这里有一个基于您需求的解决方案,它不使用长度为2
df %>%
group_by(sample) %>%
mutate(new = toString(value)) %>%
filter(grepl('\\bred, Ford\\b', new) & object == 'O1') %>%
ungroup() %>%
select(-new)
这就给了,
#一个tible:2 x 4
示例对象属性值
1 A O1颜色红色
福特汽车公司
谢谢但我还是只想要颜色和汽车都满意的样品。因此,我只希望留下带有sample=“A”的条目。
# A tibble: 2 x 4
sample object property value
<chr> <chr> <chr> <chr>
1 A O1 Color red
2 A O1 Car Ford