Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 以长格式筛选具有相同ID的对象_R_Dplyr - Fatal编程技术网

R 以长格式筛选具有相同ID的对象

R 以长格式筛选具有相同ID的对象,r,dplyr,R,Dplyr,我有一个拥有数千个样本(行)和数千个对象(列)的数据集,其中条目是不同的属性,每个条目有多个属性(我知道,不是很整洁)。 现在我不得不切换到长格式,只剩下四个列。之前,我可以很容易地过滤样品,满足几个条件 在长格式中有一个问题,例如,如果我想过滤所有对象O1,它们是红色福特。在宽格式中,我可以简单地添加一个AND条件,但在较长的时间内,我必须使用OR条件来表示汽车和颜色,但随后我将获得仅满足一个条件的样本 df%dplyr::filter((对象==“O1”&属性==“颜色”&值==“红色”)|

我有一个拥有数千个样本(行)和数千个对象(列)的数据集,其中条目是不同的属性,每个条目有多个属性(我知道,不是很整洁)。 现在我不得不切换到长格式,只剩下四个列。之前,我可以很容易地过滤样品,满足几个条件

在长格式中有一个问题,例如,如果我想过滤所有对象O1,它们是红色福特。在宽格式中,我可以简单地添加一个AND条件,但在较长的时间内,我必须使用OR条件来表示汽车和颜色,但随后我将获得仅满足一个条件的样本

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