我正在try 创建一个输出,该输出按因素级别计算计数占总计数的百分比(在数据框中),但似乎不知道如何在输出中保留分组 struct .

我可以得到我想除以的总数.

df %>% summarise(sum(num))
# 15

...和按组计算的总数...

df %>% group_by(species) %>% summarise(sum(num))
# A tibble: 3 × 2
#   species                  `sum(num)`
#   <chr>                         <int>
# 1 Farfantepenaeus duorarum          4
# 2 Farfantepenaeus notialis          0
# 3 Farfantepenaeus spp              11

但我不能让它变成这个样子.

# ???
#   species                     Percent
#   <chr>                         <int>
# 1 Farfantepenaeus duorarum       4 / 15 = 0.267
# 2 Farfantepenaeus notialis       0 / 15 = 0.000
# 3 Farfantepenaeus spp           11 / 15 = 0.733

我得到的最接近的结果是这样,但因为我使用了reFrame(),所以它返回未分组的数据

df %>% group_by(species) %>% 
  summarise(factor_count=sum(num)) %>% 
  # ungroup() %>% 
  # Wanring: # Please use `reframe()` instead., When switching from `summarise()` 
  # to `reframe()`, remember that `reframe()` always returns an ungrouped data
  reframe(percent=factor_count/sum(df$num))

# A tibble: 3 × 1
  percent
    <dbl>
1   0.267
2   0    
3   0.733

生效日期:

> dput(df)
structure(list(species = c("Farfantepenaeus notialis", "Farfantepenaeus spp", 
"Farfantepenaeus notialis", "Farfantepenaeus notialis", "Farfantepenaeus duorarum", 
"Farfantepenaeus duorarum", "Farfantepenaeus notialis", "Farfantepenaeus spp", 
"Farfantepenaeus duorarum", "Farfantepenaeus spp", "Farfantepenaeus notialis", 
"Farfantepenaeus duorarum", "Farfantepenaeus spp", "Farfantepenaeus notialis", 
"Farfantepenaeus notialis", "Farfantepenaeus spp", "Farfantepenaeus duorarum", 
"Farfantepenaeus spp", "Farfantepenaeus spp", "Farfantepenaeus duorarum", 
"Farfantepenaeus duorarum", "Farfantepenaeus spp", "Farfantepenaeus spp", 
"Farfantepenaeus spp", "Farfantepenaeus notialis"), num = c(0L, 
0L, 0L, 0L, 1L, 0L, 0L, 2L, 0L, 3L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 3L, 0L, 2L, 4L, 0L)), row.names = c(159897L, 174698L, 
236857L, 190237L, 327321L, 272931L, 304567L, 75538L, 109206L, 
351373L, 280332L, 163966L, 282183L, 341197L, 316962L, 354703L, 
343971L, 95333L, 244258L, 254061L, 87561L, 186908L, 221318L, 
258688L, 97737L), class = "data.frame")

推荐答案

两个步骤:汇总组总数,然后对所有组合进行重新计算.

library(dplyr)
df %>%
  summarize(Percent = sum(num), .by = species) %>%
  mutate(Percent = Percent / sum(Percent))
#                    species   Percent
# 1 Farfantepenaeus notialis 0.0000000
# 2      Farfantepenaeus spp 0.7333333
# 3 Farfantepenaeus duorarum 0.2666667

对于您的代码:

  • reframe不是必需的(大多数情况下当行数为changes时,它经常可以用来代替summarise,但我还没有验证两者是否/在哪里有显著差异),实际上在这里它会删除species
  • (几乎)Never在以df开头的管道中使用df$:使用df$num会忽略自管道开始以来所做的任何操作,这意味着分组、过滤、添加/更改等在df版本中不可用.当然,有时它是有用的,甚至是必要的,但它们很少.

R相关问答推荐

给定R中另一行中的值,如何插补缺失值

查找满足SpatRaster中条件的单元格位置

对lme 4对象运行summary()时出错(diag中的错误(from,names = RST):对象unpackedMatrix_diag_get找不到)

R中具有gggplot 2的Likert图,具有不同的排名水平和显示百分比

r—绘制相交曲线

在数学中正确显示摄氏度、开氏度或华氏度

使用case_match()和char数组重新编码值

R中插入符号训练函数的中心因子和尺度因子预测

矩阵的堆叠条形图,条形图上有数字作为标签

可以替代与NSE一起使用的‘any_of()’吗?

R spatstat Minkowski Sum()返回多个边界

使用for循环和粘贴创建多个变量

如何从向量构造一系列双边公式

将全局环境变量的名称分配给列表中的所有元素

在使用具有Bray-Curtis相似性的pvCluust时计算p值

判断函数未加载R中的库

在r中整理图例和堆叠图的问题

将美学添加到ggploy中的文本标签

有没有办法将勾选/审查标记添加到R中的累积关联图中?

根据向量对列表元素进行排序