gpt4 book ai didi

r - 使用 dplyr 使用两列之间的公共(public)值进行过滤

转载 作者:行者123 更新时间:2023-12-04 07:28:24 25 4
gpt4 key购买 nike

我有一个这样的数据集 -

tibble(
year = c (2005, 2005, 2005,
2006, 2006, 2006,
2007,2007,2007),
var1 = c (2136,2136,2136,
2285,2285,2285,
2968,2968,2968),
var2 = c (125860,1318,127464,
8972,2136,5046,
4739,1619,10063)
)
我想像这样过滤数据集 -
第一组按数据按变量 yearvar1 ,然后比较列 var1var2 ,
如果发现列中的值 var1var2匹配,然后我想过滤所有这些。
对于示例数据集,如果我们查看,我们可以在 var1 中看到2005 年的 2136 与 var2 中的 2136 匹配在 2006 年。因此,我想过滤 2005 年和 2006 年的行,因为在两列中 var1var2 ,它们有一个共同的值 - 2136。
所以预期的结果将如下所示 -
tibble(
year = c (2005, 2005, 2005,
2006, 2006, 2006
),
var1 = c (2136,2136,2136,
2285,2285,2285),
var2 = c (125860,1318,127464,
8972,2136,5046)
)
有人可以帮忙吗?

最佳答案

在tidyverse中相当容易。我正在使用 purrr::map2_lgl()除了这里通常的 dplyr 功能。

library(tidyverse)
df <- tibble(
year = c (2005, 2005, 2005,
2006, 2006, 2006,
2007,2007,2007),
var1 = c (2136,2136,2136,
2285,2285,2285,
2968,2968,2968),
var2 = c (125860,1318,127464,
8972,2136,5046,
4739,1619,10063)
)

df %>%
mutate(xx = map2_lgl(var1, var2, ~ .x %in% var2 | .y %in% var1)) %>%
group_by(year, var1) %>%
filter(any(xx))
#> # A tibble: 6 x 4
#> # Groups: year, var1 [2]
#> year var1 var2 xx
#> <dbl> <dbl> <dbl> <lgl>
#> 1 2005 2136 125860 TRUE
#> 2 2005 2136 1318 TRUE
#> 3 2005 2136 127464 TRUE
#> 4 2006 2285 8972 FALSE
#> 5 2006 2285 2136 TRUE
#> 6 2006 2285 5046 FALSE
reprex package 创建于 2021-06-23| (v2.0.0)
您可以删除 xx取消分组后,如果需要。我保留这个是为了解释事情。

关于r - 使用 dplyr 使用两列之间的公共(public)值进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68102019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com