使用 ftransform 和来自 collapse R 包的 fgroup_by

Posted

技术标签:

【中文标题】使用 ftransform 和来自 collapse R 包的 fgroup_by【英文标题】:Using ftransform along with fgroup_by from collapse R package 【发布时间】:2021-07-24 17:35:02 【问题描述】:

我正在尝试使用Rcollapse 重现dplyr 代码的以下输出。

dplyr代码

library(tidyverse)
starwars %>%
  select(name, mass, species) %>%
  group_by(species) %>%
  mutate(mass_norm = mean(mass, na.rm = TRUE))

dplyr代码输出

# A tibble: 87 x 4
# Groups:   species [38]
   name                mass species mass_norm
   <chr>              <dbl> <chr>       <dbl>
 1 Luke Skywalker        77 Human        82.8
 2 C-3PO                 75 Droid        69.8
 3 R2-D2                 32 Droid        69.8
 4 Darth Vader          136 Human        82.8
 5 Leia Organa           49 Human        82.8
 6 Owen Lars            120 Human        82.8
 7 Beru Whitesun lars    75 Human        82.8
 8 R5-D4                 32 Droid        69.8
 9 Biggs Darklighter     84 Human        82.8
10 Obi-Wan Kenobi        77 Human        82.8
# … with 77 more rows

collapse代码

library(collapse)
starwars %>%
  fselect(name, mass, species) %>%
  fgroup_by(species) %>%
  ftransform(mass_norm = fmean(mass, na.rm = TRUE))

collapse代码输出

# A tibble: 87 x 4
   name                mass species mass_norm
 * <chr>              <dbl> <chr>       <dbl>
 1 Luke Skywalker        77 Human        97.3
 2 C-3PO                 75 Droid        97.3
 3 R2-D2                 32 Droid        97.3
 4 Darth Vader          136 Human        97.3
 5 Leia Organa           49 Human        97.3
 6 Owen Lars            120 Human        97.3
 7 Beru Whitesun lars    75 Human        97.3
 8 R5-D4                 32 Droid        97.3
 9 Biggs Darklighter     84 Human        97.3
10 Obi-Wan Kenobi        77 Human        97.3
# … with 77 more rows

Grouped by:  species  [38 | 2 (5.5)] 

想知道为什么我的 collapse 代码回答错误。任何提示。

【问题讨论】:

【参考方案1】:

fmean 默认使用na.rm = TRUE。此外,还有一个选项可以在fmean 中指定分组,即g。默认情况下,TRANULL,它返回一个汇总输出,但我们可以将其更改为 replace_fill 以返回完整长度

library(collapse)
ftransform(slt(starwars, name, mass, species),
      mass_norm = fmean(mass, species, TRA = 'replace_fill'))

-输出

# A tibble: 87 x 4
#   name                mass species mass_norm
# * <chr>              <dbl> <chr>       <dbl>
# 1 Luke Skywalker        77 Human        82.8
# 2 C-3PO                 75 Droid        69.8
# 3 R2-D2                 32 Droid        69.8
# 4 Darth Vader          136 Human        82.8
# 5 Leia Organa           49 Human        82.8
# 6 Owen Lars            120 Human        82.8
# 7 Beru Whitesun lars    75 Human        82.8
# 8 R5-D4                 32 Droid        69.8
# 9 Biggs Darklighter     84 Human        82.8
#10 Obi-Wan Kenobi        77 Human        82.8
# … with 77 more rows

如果我们要使用链,请使用GRP 指定g 或数据上的分组变量(.

library(dplyr)
starwars %>%
 fselect(name, mass, species) %>%
 fgroup_by(species) %>%
 ftransform(mass_norm = fmean(mass, GRP(.), TRA = 'replace'))

【讨论】:

感谢@akrun 提供有用的答案。如果能解释一下我的代码有什么问题,将不胜感激。 @MYaseen208 更新对您有帮助吗?函数有g或需要指定的分组 感谢@akrun 的帮助。我明白了。

以上是关于使用 ftransform 和来自 collapse R 包的 fgroup_by的主要内容,如果未能解决你的问题,请参考以下文章

最简单的GLSL,Shader

雷达波Shader

使用 getElementById 切换活动类

使用 Bootstrap 折叠侧边栏

有效地将异步 IMFSourceReader 连接到同步 IMFTransform

使用 Django 视图值更新 JavaScript [重复]