将数据帧中的变量与按不同变量分组和子集的相交

时间:2019-10-29 09:31:03

标签: r dplyr

我有一个带有以下变量的数据框:SourceNameDateValue。 我想使用管道运算符(%>%)和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编写此代码的巧妙方法?

1 个答案:

答案 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。然后,我按NameDate分组,并使用n()函数对NameDate的给定组合的实例数进行计数。如果实例数等于不同的Source标签数,则意味着Name的所有子集都存在DateSource的组合。