【问题标题】:Tidyverse - Gather unite and spread when grouping by multiple variablesTidyverse - 按多个变量分组时聚集并传播
【发布时间】:2023-03-13 00:52:01
【问题描述】:

我知道 这是一个非常简单的问题,我一直在寻找答案 herehere 试图针对我当前的问题调整代码,但我没有成功。 因此,有几次,我们需要按多个组显示包含平均值和标准差(以及其他信息)的表格。这是一个非常常见的分析,但是当我们决定使用 tidyverse 来运行它时,有时代码变得难以处理。

我知道这段代码非常接近我想要的

all_fpc %>% 
  group_by(arm, Time) %>% 
  summarise_at(vars(sum_fpc), funs(mean, sd)) %>% 
  gather(key, val, mean:sd) %>% 
  separate(key, into = c('key1', 'key2')) %>% 
  print(n=nrow(.))

但我在这里堆积如山。

要重现此数据集,请尝试以下操作:

ds <- data.frame(arm=c("Group 1","Group 2","Group 3", "Group 4"), 
                 Time = c("First","Second","Third"),
                 result = rnorm(n = 120,mean=10,sd=2))
ds %>% 
  group_by(arm, Time) %>% 
  summarise_at(vars(result), funs(mean, sd)) %>% 
  gather(key, val, mean:sd) %>% 
  print(n=nrow(.))

第二个问题:任何人都知道任何可以以更简单的方式创建数据透视表的包(基于 tidyverse)?

已编辑:一如既往,感谢所有建议!这个问题的答案如下。

【问题讨论】:

  • 你需要ds %&gt;% group_by(arm, Time) %&gt;% mutate(rn = row_number()) %&gt;% spread(Time, result)
  • 您使用的是separate 而不是spread
  • 我总是觉得gatherspread 令人困惑,这就是你要找的东西,使用reshape2:ds %&gt;% reshape2::dcast(arm+Time ~ key, value="val")
  • @akrun 一如既往的感谢。我正在重温你给我的一些旧代码,我快到了。您能否解释一下如何在没有外部软件包的情况下重现此输出?库(ezsummary)`ds %>% 选择(臂,时间,结果)%>% group_by(臂,时间)%>% ezsummary(数字 = 1)`
  • 对于旋转,请尝试rpivotTable。它丑陋但实用且用途广泛。

标签: r tidyverse


【解决方案1】:

如果我们想重现ezsummary 的输出,只需summarise

ds %>% 
   group_by(arm, Time) %>% 
   summarise(variable = 'result', 
             mean = round(mean(result), 1),
             sd = round(sd(result), 1))

【讨论】:

  • 我总是问自己,你怎么对 tidyverse 了解这么多......我>很多!
  • @Luis 很高兴知道它有帮助。我每天都写代码,从其他代码、问题和其他语言中学习。我认为与任何其他领域一样,实践是关键。假设您在一年中每天(始终如一地)投入一个小时进行编码,那么您在这方面会比您的起点要好得多。
猜你喜欢
  • 2023-01-04
  • 2022-01-06
  • 1970-01-01
  • 2020-08-31
  • 2021-03-24
  • 2019-05-17
  • 2021-03-29
  • 2023-01-12
  • 1970-01-01
相关资源
最近更新 更多