我有一个带有以下变量的数据框:Source
,Name
,Date
和Value
。
我想使用管道运算符(%>%
)和dplyr
,找到不同“源”之间每个“名称”的“日期”变量的交集。
这是示例数据帧: Example data frame
因此,对于名称a
,每个Source
值都有以下日期向量:
Date vectors for name 'a' per 'Source'
我只想通过比较不同的Name
值来保留给定Source
的日期相交的记录(行),因此在这种情况下,所有Source
之间的相交日期值Name
的{{1}}的子集是:01.01.2019,03.01.2019,05.01.2019。
我曾考虑过按'Name'变量进行分组,然后使用a
,但我想不出如何通过'Source'来对dplyr::intersect
进行子集并将子集提供给用户的方法。 df
函数将不同的“日期”向量子集(由“源”标签确定)之间的交集:
dplyr::intersect
或者,是否有使用df %>% dplyr::group_by(Name) %>% dplyr::intersect(Here the subsets of df should be provided as arguments)
或其他inner_join
编写此代码的巧妙方法?
答案 0 :(得分:0)
我想通了,因此以下语法确实想要我想要:
df %>% dplyr::mutate(Source.Count = n_distinct(Source)) %>% dplyr::group_by(Name, Date) %>% dplyr::filter(n() == Source.Count) %>% dplyr::select(Source, Name, Date, Value)
我创建Source.Count
变量的原因是,在对n_distinct
函数进行分组之后,该函数无法正常运行,并且没有为每行提供适当数量的Sources。然后,我按Name
和Date
分组,并使用n()
函数对Name
和Date
的给定组合的实例数进行计数。如果实例数等于不同的Source
标签数,则意味着Name
的所有子集都存在Date
和Source
的组合。