计算 R 中具有特定列条件的行
count rows with specific column condition in R
假设我有通过以下代码创建的数据集:
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 的 window 来计算 Y 列中 "C" 的出现次数。
因此,输出将如下所示:
X_Range Count_of_c
1-10 2
11-20 0
21-30 4
31-40 1
41-50 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
是否符合您的预期?
假设我有通过以下代码创建的数据集:
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 的 window 来计算 Y 列中 "C" 的出现次数。 因此,输出将如下所示:
X_Range Count_of_c
1-10 2
11-20 0
21-30 4
31-40 1
41-50 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
是否符合您的预期?