通过计算 R 中多个指定列的值来聚合数据集

问题描述 投票:0回答:1

我的数据集包含几列:第一列“性别”有 2 个值(男/女),第二列“组”表示品种组(40 个不同的值),13 列每列代表一个特定年份,其中包含有关特定年份的年龄 (<1-20) (Some of them contain empty values, Image 1). One line marks one individual.

我希望将这些数据汇总到一个新表中,该表告诉我数据集中有多少特定年龄的特定品种组的男性/女性(计数)。年份不相关。空的年龄值意味着该个体在该年已不存在,在计算时应被忽略。图 2 显示了所需结果的示例。

这里什么样的配方合适?我正在考虑聚合函数,但由于值不是数字,所以我没有找到适用于此的正确公式。

r aggregate character
1个回答
0
投票

正如 @Allan Cameron 评论的那样,R 中不存在这种数据结构。您的屏幕截图表明了以下内容:您的目标是导入第一个屏幕截图中所示的 .csv 文件(因此空白 Excel 单元格在 R 中变为

NA
)并且然后目标是在 R 中进行类似的总结,如第二个屏幕截图所示。下面示例中的
dat
应说明您的(导入的)数据,下面的编码显示了一种方法,您可以如何获得比第二个屏幕截图中显示的内容(更整洁)的方法。

library(tidyverse)

dat <- tibble(
  sex = c("m", "m", "f", "f"),
  grp = c("grp1", "grp2", "grp4", "grp4"),
  y_2008 = c(14, 15, NA, 15),
  y_2009 = c(15, 16, 15, 16),
  y_2010 = c(16, 17, 16, 17),
  y_2011 = c(17, NA, 17, NA),
  y_2012 = c(NA, NA, 18, NA),
  y_2013 = NA
)

dat %>% 
  pivot_longer(!c(sex, grp)) %>% 
  mutate(n = sum(!is.na(value)), .by = c(sex, grp, value)) %>% 
  distinct(sex, grp, value, n) %>% 
  drop_na(value)
© www.soinside.com 2019 - 2024. All rights reserved.