r - 使用 ftransform 和来自折叠 R 包的 fgroup_by

标签 r dplyr tidyverse collapse

我正在尝试重现 dplyr 的以下输出代码与 R包裹collapse .
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代码。任何提示。

最佳答案

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'))

关于r - 使用 ftransform 和来自折叠 R 包的 fgroup_by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67349744/

相关文章:

在 R 或聚合中 reshape 数据长数据?

r - rbind (deparse.level, ...) 中的错误 : invalid list argument: all variables should have the same length

r - 使用 igraph : community membership of components built by decompose. graph()

r - 将 coord_flip() 应用于单层

r - 由于 NA 多次运行时出现 Wilcox.test 错误(在 R 中使用 dplyr)

r - 根据另一个 tibble 过滤 mutate 中的一个 tibble?

r - 使用 dplyr 进行线性插值,但跳过具有所有缺失值的组

r - 创建一个列以指示其他列中存在一个值

r - 如何在 R 中将列名称的编码更改为 utf 8

r - 如何在 dplyr mutate 中使用由列遮蔽的变量