标签: summarize

多个变量的汇总统计,统计为行,变量为列?

我正在尝试使用 dplyr::summarize() 和 dplyr::across() 来获取行中包含多个汇总统计信息和列中的变量的小标题。我只能通过使用 dplyr::bind_rows() 来实现这个结果,但我想知道是否有更优雅的方法来获得相同的输出。

> library(tidyverse)
?? Attaching packages ?????????????????????????????????????????????? tidyverse 1.3.1 ??
? ggplot2 3.3.3     ? purrr   0.3.4
? tibble  3.1.1     ? dplyr   1.0.6
? tidyr   1.1.3     ? stringr 1.4.0
? readr   1.4.0     ? forcats 0.5.1
?? Conflicts ????????????????????????????????????????????????? tidyverse_conflicts() ??
? dplyr::filter() masks stats::filter()
? dplyr::lag()    masks stats::lag()
> 
> bind_rows(min = summarize(starwars, across(where(is.numeric), min, 
+       na.rm = TRUE)), 
+   median = summarize(starwars, across(where(is.numeric), median, 
+       na.rm = TRUE)), 
+   mean = summarize(starwars, across(where(is.numeric), mean, …
Run Code Online (Sandbox Code Playgroud)

r dplyr summarize tidyverse across

2
推荐指数
1
解决办法
77
查看次数

求组内计数的平均值

我有一个如下所示的数据框:

library(tidyverse)    
x <- tibble(
   batch = rep(c(1,2), each=10),
   exp_id = c(rep('a',3),rep('b',2),rep('c',5),rep('d',6),rep('e',4))
 )
Run Code Online (Sandbox Code Playgroud)

我可以运行下面的代码来获取每个的计数exp_id

x %>% group_by(batch,exp_id) %>% 
  summarise(count=n())  
Run Code Online (Sandbox Code Playgroud)

生成:

  batch exp_id count
  <dbl> <chr>  <dbl>
1     1 a          3
2     1 b          2
3     1 c          5
4     2 d          6
5     2 e          4
Run Code Online (Sandbox Code Playgroud)

生成这些计数平均值的一种非常丑陋的方法是:

x %>% group_by(batch,exp_id) %>% 
  summarise(count=n()) %>% 
  ungroup() %>% 
  group_by(batch) %>% 
  summarise(avg_exp = mean(count))
Run Code Online (Sandbox Code Playgroud)

生成:

  batch avg_exp
  <dbl>   <dbl>
1     1    3.33
2     2    5 
Run Code Online (Sandbox Code Playgroud)

有没有更简洁和“整洁”的方式来生成这个?

r dataframe dplyr summarize

2
推荐指数
1
解决办法
46
查看次数

使用 R 中的每日数据汇总每周平均值

如何在数据中添加一列 price.wk.average 使 price.wk.average 等于上周的平均价格,并在数据中添加一列 price.mo.average 使其等于平均值上个月的价格?price.wk.average 将在整个星期内保持不变。

 Dates    Price   Demand  Price.wk.average   Price.mo.average
 2010-1-1   x        x
 2010-1-2   x        x
 ......
  2015-1-1  x         x
Run Code Online (Sandbox Code Playgroud)

r mean lag summarize mutate

1
推荐指数
2
解决办法
3685
查看次数

在summarise_at()中使用n()时出错

在summarise_at()中使用n()时,出现以下错误:

Error: n() should only be called in a data context
Call `rlang::last_error()` to see a backtrace
Run Code Online (Sandbox Code Playgroud)

其他人认为这可能是dplyrwith 的掩盖问题plyr,两个解决方案是:

  1. 替换summarise_at()为dplyr :: summarise_at()
  2. 呼叫 detach("package:plyr", unload=TRUE)

都没有消除此错误,我很想知道是什么原因引起的。这是一个可重现的示例,应导致相同的错误:

Df <- data.frame(
  Condition = c(rep("No", 20), rep("Yes",20)),
  Height = c(rep(1,10),rep(2,10),rep(1,10),rep(2,10)),
  Weight = c(rep(10,5),rep(20,5),rep(30,5), rep(40,5))
)

x <- c("Height","Weight")

Df %>% 
  group_by(Condition) %>% 
  summarise_at(vars(one_of(x)), c(mean = mean, sd = sd, count = n()))
Run Code Online (Sandbox Code Playgroud)

注意:如果删除count = n()该代码,运行不会出现任何问题

r dplyr summarize rlang

1
推荐指数
1
解决办法
62
查看次数

在dplyr summarise()中按组计算上下置信区间

我正在尝试制作一个表格,显示N(观察次数)、百分比频率(答案 > 0)以及百分比频率的上下置信区间,我想按类型对其进行分组。

数据示例

dat <- data.frame(
  "type" = c("B","B","A","B","A","A","B","A","A","B","A","A","A","B","B","B"),
  "num" = c(3,0,0,9,6,0,4,1,1,5,6,1,3,0,0,0)
)
Run Code Online (Sandbox Code Playgroud)

预期输出(已填充值):

Type   N   Percent   Lower 95% CI   Upper 95% CI
A
B
Run Code Online (Sandbox Code Playgroud)

试图

library(dplyr)
library(qwraps2)

table<-dat %>%
  group_by(type) %>%
  summarise(N=n(),
            mean.ci = mean_ci(dat$num),
            "Percent"=n_perc(num > 0))
Run Code Online (Sandbox Code Playgroud)

这有助于获得 N 和百分比频率,但在我添加 mean_ci 时返回错误:“列的长度必须为 1(汇总值),而不是 3”

我试过的第二个代码,在这里找到:

table2<-dat %>%
  group_by(type) %>%
  summarise(N.num=n(),
            mean.num = mean(dat$num),
            sd.num = sd(dat$num),
            "Percent"=n_perc(num > 0)) %>%
  mutate(se.num = sd.num / sqrt(N.num),
         lower.ci = 100*(mean.num - qt(1 - (0.05 …
Run Code Online (Sandbox Code Playgroud)

r group-summaries dplyr summarize qwraps2

1
推荐指数
1
解决办法
1361
查看次数

计算每个组的字符数并汇总值

我似乎可以为我的问题找到合适的代码。我想根据不同的条件创建组并汇总(总和、计数或长度)其他列。

我试过 group_by 并用不同的条件进行总结,但还没有找到任何有效的方法。

我有一个类似于这样的表:

data <- data.frame(Name= c('Anna', 'Anna', 'Anna', 'Anna', 'Anna',
                       'Bella', 'Bella', 'Bella', 'Camilla', 'Camilla'),
               Date= c('1.1.2021', '1.1.2021', '2.1.2021', '3.1.2021', '3.1.2021', 
                       '1.1.2021', '5.1.2021', '5.1.2021', '7.1.2021', '8.1.2021'),
               Item= c('Apple','Pear', 'Zucini','Apple', 'Broccoli',
                       'Apple','Pear','Apple','Apple', 'Tomato'),
               Category= c('Fruit', 'Fruit', 'Vegetable', 'Fruit', 'Vegetable', 
                           'Fruit', 'Fruit', 'Fruit', 'Fruit', 'Vegetable'),
               Weight_kg= c(0.2,0.3,0.5,0.4,1.1,
                            1,0.5,0.8,1.2,0.5)
               )
Run Code Online (Sandbox Code Playgroud)

这将是我想要的输出:

desired_table <- data.frame(Name=c('Anna', 'Bella', 'Camilla'),
Shopping_days=c(3,2,2),
days_fruit=c(2,2,1),
days_vegetables=c(2,0,1),
Total_kg=c(2.5,2.3,1.7),
Fruit_kg=c(0.9,2.3,1.2),
Vegetables=c(1.6,0,0.5))
Run Code Online (Sandbox Code Playgroud)

我已经尝试了许多与此类似的代码变体,但显然不起作用:

data1 <- data %>%
group_by(Name) %>%
summarize(Shopping_days = length(unique(Date)),
days_fruit = length(unique(Date, Category='Fruit')),
days_vegetables = length(unique(Date, Category='Vegetables')), …
Run Code Online (Sandbox Code Playgroud)

group-by r sum countif summarize

1
推荐指数
1
解决办法
70
查看次数

R中按类别的动态聚合

我有以下数据帧

a        <- c(rep("CGR", 6), rep("AUS", 6), rep("ROW", 6) )
b        <- c("AUT", "CH", "ROW", "ROW", "ROW", "ROW", "AUT", "CH", "ROW", "ROW", "ROW", "ROW", "AUT", "CH", "ROW", "ROW", "ROW", "ROW" )
v        <- 1:18
category <- c("a", "b", "a", "a", "b", "b", "a", "b", "a", "a", "b", "b", "a", "b", "a", "a", "b", "b")

data.frame(a,b,v,category)


     a   b  v category
1  CGR AUT  1        a
2  CGR  CH  2        b
3  CGR ROW  3        a
4  CGR ROW  4        a
5 …
Run Code Online (Sandbox Code Playgroud)

r summarize

0
推荐指数
1
解决办法
68
查看次数

没有映射器的java流收集器?

我想Collectors.summarizingInt用整数调用一个集合。到目前为止我看到的例子是在一个带有(比如)Employees 的 Set 上,然后被称为collect(Collecters.summorizingInt(Employee::getWage)). 对于裸整数 summorizingInt 需要一个参数,所以我可以这样做,collect(Collectors.summarizingInt((i) -> i))但提供一个自映射器感觉有点奇怪。

有替代品吗?

java stream summarize

0
推荐指数
1
解决办法
93
查看次数

标签 统计

summarize ×8

r ×7

dplyr ×4

across ×1

countif ×1

dataframe ×1

group-by ×1

group-summaries ×1

java ×1

lag ×1

mean ×1

mutate ×1

qwraps2 ×1

rlang ×1

stream ×1

sum ×1

tidyverse ×1