【问题标题】:count rows with specific column condition in R在 R 中计算具有特定列条件的行
【发布时间】:2020-01-23 16:06:19
【问题描述】:

假设我有由这段代码创建的数据集:

set.seed(3192)
Data <- data.frame(
  X = sample(50,20),
  Y = sample(letters[1:4], 20, replace = TRUE)
)
Data <- Data[do.call(order,Data),]
Data
## X  Y 
## 2  b
## 3  c
## 4  c
## ...
## ...
## 47 c
## 49 d
## 50 a

我想通过扫描 X 列中 10 的窗口大小来计算 Y 列中“C”的出现次数。 因此,输出将如下所示:

X_Range Count_of_c
 1-10      2
11-20      0
21-30      4
31-40      1
41-50      1

有人有想法吗?

【问题讨论】:

    标签: r dataframe count scanning


    【解决方案1】:

    您可以使用cut 函数在您的 x 列上创建组,然后按此cut 列进行分组以计算计数(这里,我使用的是dplyr):

    library(dplyr)
    Data %>%  mutate(Cut = cut(X, breaks = seq(0,50, by = 10))) %>% 
      group_by(Cut,Y,.drop = FALSE) %>%
      summarise(Count_of_c = n()) %>%
      filter(Y =="c") 
    
    # A tibble: 5 x 3
    # Groups:   Cut [5]
      Cut     Y     Count_of_c
      <fct>   <fct>      <int>
    1 (0,10]  c              0
    2 (10,20] c              0
    3 (20,30] c              1
    4 (30,40] c              1
    5 (40,50] c              3
    

    看起来和你期待的一样吗?

    【讨论】:

    • 您省略了计算 Y 列中“c”出现次数的部分。在group_by(Cut) 之后添加filter(Y == "c") %&gt;% 应该有助于获得所需的结果。
    • 哎呀!!我的错……你完全正确。我正在编辑我的答案以添加它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多