汇总值 dplyr r
Summarise values dplyr r
我有一个目标变量,范围从 -33 到 17,变量 merchant_category_id 是 int 类型。
summary(total_trans$target)
Min. 1st Qu. Median Mean 3rd Qu. Max.
-33.21928 -0.80808 -0.09018 -0.45554 0.54223 17.96507
str(total_trans$merchant_category_id)
merchant_category_id: int 278 307 705 307 705 307 705 307 278 332
我想找到变量 merchant_category_id 的数量,从最低到最高,只有当目标变量小于或等于第一个四分位数时。
我试过这样做:
total_trans %>% group_by(merchant_category_id) %>% summarise(counting = count(merchant_category_id))
响应错误:
Error in summarise_impl(.data, dots) :
Evaluation error
之后:
total_trans %>% summarise(Range = list(range(merchant_category_id[target <= summary(target)[2]])))
回复:
Range
1 -1, 891
也试试:
total_trans %>% group_by(merchant_category_id) %>% summarise(Range = list(range(target[target < -0.80808])))
回复:
# A tibble: 325 x 2
merchant_category_id Range
<int> <list>
1 -1 <dbl [2]>
2 2 <dbl [2]>
3 9 <dbl [2]>
4 11 <dbl [2]>
5 14 <dbl [2]>
6 16 <dbl [2]>
7 18 <dbl [2]>
8 19 <dbl [2]>
9 21 <dbl [2]>
10 27 <dbl [2]>
# ... with 315 more rows
There were 26 warnings (use warnings() to see them)
如果我这样做
total_trans %>% count(merchant_category_id, wt = target < -0.80808)
或
total_trans %>%
mutate(q1 = target <= quantile(target, 1/4)) %>%
filter(q1) %>%
group_by(merchant_category_id) %>%
summarise(count = n())
我得到这样的回应:
merchant_category_id n
<int> <int>
1 -1 432
2 2 8364
3 9 2580
4 11 9
5 14 1800
6 16 177
7 18 4
8 19 24371
9 21 466
10 27 4
这几乎就是我需要的。只需要按第n列,从最大数量到最小数量
如何使用 dplyr 来做到这一点?
根据我对这个问题的理解,下面的内容可以解决问题。
先组成一个数据集
set.seed(1234)
n <- 100
total_trans <- data.frame(merchant_category_id = sample.int(20, n, TRUE),
target = runif(n, -33, 17))
现在是问题。
library(dplyr)
total_trans %>%
mutate(q1 = target <= quantile(target, 1/4)) %>%
filter(q1) %>%
group_by(merchant_category_id) %>%
summarise(count = n())
请注意,mutate
和 filter
这两个代码行可以变成一个:filter(target <= quantile(target, 1/4))
。为了使代码更具可读性,我保留了它。
编辑。
下面按计数排序,只保留结果的前 20 行。
total_trans %>%
filter(target <= quantile(target, 1/4)) %>%
count(merchant_category_id) %>%
arrange(desc(n)) %>%
head(20)
我不知道这是最佳答案:
top_n(total_trans %>%
mutate(q1 = target <= quantile(target, 1/4)) %>%
filter(q1) %>%
group_by(merchant_category_id) %>%
summarise(count = n())%>% arrange(desc(count)), 20)
但可以使用 top_n。
非常感谢大家!!!
我有一个目标变量,范围从 -33 到 17,变量 merchant_category_id 是 int 类型。
summary(total_trans$target)
Min. 1st Qu. Median Mean 3rd Qu. Max.
-33.21928 -0.80808 -0.09018 -0.45554 0.54223 17.96507
str(total_trans$merchant_category_id)
merchant_category_id: int 278 307 705 307 705 307 705 307 278 332
我想找到变量 merchant_category_id 的数量,从最低到最高,只有当目标变量小于或等于第一个四分位数时。
我试过这样做:
total_trans %>% group_by(merchant_category_id) %>% summarise(counting = count(merchant_category_id))
响应错误:
Error in summarise_impl(.data, dots) :
Evaluation error
之后:
total_trans %>% summarise(Range = list(range(merchant_category_id[target <= summary(target)[2]])))
回复:
Range
1 -1, 891
也试试:
total_trans %>% group_by(merchant_category_id) %>% summarise(Range = list(range(target[target < -0.80808])))
回复:
# A tibble: 325 x 2
merchant_category_id Range
<int> <list>
1 -1 <dbl [2]>
2 2 <dbl [2]>
3 9 <dbl [2]>
4 11 <dbl [2]>
5 14 <dbl [2]>
6 16 <dbl [2]>
7 18 <dbl [2]>
8 19 <dbl [2]>
9 21 <dbl [2]>
10 27 <dbl [2]>
# ... with 315 more rows
There were 26 warnings (use warnings() to see them)
如果我这样做
total_trans %>% count(merchant_category_id, wt = target < -0.80808)
或
total_trans %>%
mutate(q1 = target <= quantile(target, 1/4)) %>%
filter(q1) %>%
group_by(merchant_category_id) %>%
summarise(count = n())
我得到这样的回应:
merchant_category_id n
<int> <int>
1 -1 432
2 2 8364
3 9 2580
4 11 9
5 14 1800
6 16 177
7 18 4
8 19 24371
9 21 466
10 27 4
这几乎就是我需要的。只需要按第n列,从最大数量到最小数量
如何使用 dplyr 来做到这一点?
根据我对这个问题的理解,下面的内容可以解决问题。
先组成一个数据集
set.seed(1234)
n <- 100
total_trans <- data.frame(merchant_category_id = sample.int(20, n, TRUE),
target = runif(n, -33, 17))
现在是问题。
library(dplyr)
total_trans %>%
mutate(q1 = target <= quantile(target, 1/4)) %>%
filter(q1) %>%
group_by(merchant_category_id) %>%
summarise(count = n())
请注意,mutate
和 filter
这两个代码行可以变成一个:filter(target <= quantile(target, 1/4))
。为了使代码更具可读性,我保留了它。
编辑。
下面按计数排序,只保留结果的前 20 行。
total_trans %>%
filter(target <= quantile(target, 1/4)) %>%
count(merchant_category_id) %>%
arrange(desc(n)) %>%
head(20)
我不知道这是最佳答案:
top_n(total_trans %>%
mutate(q1 = target <= quantile(target, 1/4)) %>%
filter(q1) %>%
group_by(merchant_category_id) %>%
summarise(count = n())%>% arrange(desc(count)), 20)
但可以使用 top_n。
非常感谢大家!!!