【问题标题】:r subsetting based on a character variable for unique idsr 基于唯一 id 的字符变量的子集
【发布时间】:2019-06-06 19:17:44
【问题描述】:

我正在尝试根据“类别”变量对数据进行子集化。更具体地说,该类别有两个级别:a 和 b。示例数据如下所示:

    id <- c(1,2,2,2,1,1,2,2,1,2)
    category <- c("a", "b", "a", "a", "b", "a","a", "b","a","a")

    data <- data.frame("id"=id, "category"=category)
    > data
   id category
1   1        a
2   2        b
3   2        a
4   2        a
5   1        b
6   1        a
7   2        a
8   2        b
9   1        a
10  2        a

我想获得在类别变量中只有超过 3 个 a 或 b 计数的 id 。我先看桌数, 表格可能如下所示:(这部分不一定打印出来)

      a   b
1     3   1
2     4   2

然后选择与我的标准匹配的 id 。

      a   b

2     4   2

提前致谢!

【问题讨论】:

    标签: r subset


    【解决方案1】:

    dplyr 的一种可能是:

    data %>%
     count(id, category) %>%
     group_by(id) %>%
     filter(n_distinct(category) == 2 & any(n > 3))
    
         id category     n
      <dbl> <fct>    <int>
    1     2 a            4
    2     2 b            2
    

    如果你想要精确的输出,dplyrtidyr,你可以这样做:

    data %>%
     count(id, category) %>%
     group_by(id) %>%
     filter(n_distinct(category) == 2 & any(n > 3)) %>%
     spread(category, n)
    
         id     a     b
      <dbl> <int> <int>
    1     2     4     2
    

    【讨论】:

      【解决方案2】:

      如果您只想要符合您的条件的 id,您可以使用 tablerowSums

      names(which(rowSums(table(data) > 3) != 0))
      [1] "2"
      

      【讨论】:

        猜你喜欢
        • 2019-12-24
        • 2023-04-03
        • 2015-03-14
        • 2021-09-16
        • 1970-01-01
        • 2023-01-05
        • 2013-06-09
        • 1970-01-01
        相关资源
        最近更新 更多