【问题标题】:Returning matched values with dplyr [duplicate]使用 dplyr 返回匹配的值 [重复]
【发布时间】:2020-11-02 20:08:05
【问题描述】:

我已经看到许多关于基于多个条件返回行的线程,但我正在努力思考最好的方法是 dplyr。我有一个大型的二元数据集和下面的模拟数据。我想返回 x = 1 和 y 值匹配的每个 country1 值的行(在本例中为 10,但不是 11)。

country1 <- c("a", "a", "a", "a")
country2 <- c("b", "c", "b", "d")
x <- c(0,1,1,1)
y <- c(10, 10, 11, 10)
df <- data.frame(country1, country2, x, y)

df
country1 country2 x  y
a        b        0 10
a        c        1 10
a        b        1 11
a        d        1 10
library(dplyr)
df <- df %>%
group_by(country1)
filter(x==1, y == ?)

我想结束

country1 country2 x  y
a        c        1 10
a        d        1 10

数据集大约有 900,000 行,所以我想匹配所有匹配的 y 值,而不是像上面示例中的 y == 10 那样写出每个值。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    dplyr 的一种可能是:

    df %>%
     group_by(country1, x, y) %>%
     filter(n() == 2)
    
      country1 country2     x     y
      <fct>    <fct>    <dbl> <dbl>
    1 a        c            1    10
    2 a        d            1    10
    

    【讨论】:

    • 我没想过要使用出现频率。这将为我的真实数据返回 0 个观察值。如果我理解上面的代码,它会在组中出现两次 y 时查找?
    • 它保留了 country1、x 和 y 列的组合以及两种情况。当它不起作用时,你能详细说明一下吗?
    • 我相信这是因为数据是二元的,它们应该按另一个时间变量分组,导致所有对出现超过 2 次,我可能需要更改问题。
    • 就是这样,谢谢!我忘了添加第二个时间变量,如果我在 group_by 部分添加一个时间变量“t”,它就可以工作。
    猜你喜欢
    • 1970-01-01
    • 2018-09-24
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 2014-01-20
    相关资源
    最近更新 更多