r - 对列值(group_by)求和,保持 NA 值,而不是用 R 中的零替换
问题描述
我试图将列值按另一列分组,我需要保留 NA 值,我不应该用零替换值,因为基于总和,如果总和为 NA,我必须给出 Rank 等级应该为空。
以下是理解问题的示例
列 1 列 2 列 3
一个 10 英镑
b gb 不适用
cgb 不适用
d 国标 4
e Hs 81
b Hs NA
c Hs 2
一个 Rd NA
x Rd 不适用
z Rd NA
我必须按 column2 对 column3 值进行求和,并且在进行求和时,我不应该考虑 NA 值并将该组的其他值相加,我不应该删除或用零替换 NA 值。基于这个总和,如果总和为 NA(参考组 Rd),我必须给出排名,那么将没有排名。我可以用零替换 NA 值,但我必须在 sum 之后给出排名,如果 sum 为 NA,排名将为空(如果是上述数据中的 Rd 组)。对于 gb 组,总和值为 14,Hs 组总和值为 83,Rd 组总和值为 NA,在这种情况下,该组将没有排名。
下面是我试过的代码片段
df %>% group_by_at(column2) %>% summarise(sum = sum(column3, na.rm = TRUE))
上面的代码通过将所有 NA 替换为零来求和值,但我不想替换。我需要 NA 给予排名。你能提供任何解决方案吗?
预期输出:
column2 column3 排名
国标 14 2
HS 83 1
Rd NA 无等级
解决方案
基础 R 解决方案:
within(aggregate(column3~column2, df, FUN = function(x){
ifelse(all(is.na(x)), NA_integer_, sum(x, na.rm = TRUE))},
na.action = na.pass), {rank = ifelse(is.na(column3), NA_integer_,
rank(-column3))})
推荐阅读
- c++ - 我认为我的变量没有正确分配
- python - 如何实现具有点到面距离的 ICP
- c++ - 为什么 SelectedShape() 调用返回不可用的结果?
- angular - Ionic 应用深层链接无法正常工作
- python - 创建一个新的 pandas 列,该列使用现有列填充以前的行并根据多个条件分组
- mysql - mySQL:查询以在上个月的每 22 日获取所有行
- github - 在 github 操作中触发工作流之前,我们可以等待另一个 repo 工作流完成吗?
- latex - pandoc 的 markdown pdf:字体大小为 11 或 12pt 会增大字体,但 13 或 14pt 会变小
- node.js - 更新 mongoDB 中的深层嵌套数组(不是文档/对象数组)
- java - 如何将模型的对象传递给 thymeleaf,并将控制器隐藏在 thymeleaf 中?