【问题标题】:How to return sum of row values based on # of missing values in defined columns in R?如何根据 R 中定义的列中缺失值的数量返回行值的总和?
【发布时间】:2018-07-16 21:30:25
【问题描述】:

我正在尝试在 R 中执行此算法:

数据名称:EPIC_26

对于第 1 到 6 列,如果只有 1 个缺失值,则将剩余 5 行值相加形成另一列,如果缺失值超过 1 个,则返回该列的缺失/na 作为结果。

我假设我必须执行以下标准才能得到我的结果,计算第 1 到第 6 列每行缺失值的数量,如果为 0,则将所有 6 个值相加;如果为 1,则忽略该缺失值并将所有其他 5 相加;否则,如果大于 1,则返回缺失。

我已经尝试过 is.na() 函数,但我不知道如何为我的数据选择定义的列。请帮我解决这个问题。非常感谢!

【问题讨论】:

  • 请用正确的格式更新您的描述

标签: r algorithm sum


【解决方案1】:

我先创建一个新变量来计算NA的数量,然后使用一个简单的ifelse()条件:

df <- data.frame(v1 = c(NA, 1:5),
                 v2 = c(NA, NA, 2:5),
                 v3 = c(NA, NA, NA, 3:5),
                 v4 = c(NA, NA, NA, NA, 4:5),
                 v5 = c(NA, NA, NA, NA, NA, 5),
                 v6 = rep(NA, 6)
)

> df
  v1 v2 v3 v4 v5 v6
1 NA NA NA NA NA NA
2  1 NA NA NA NA NA
3  2  2 NA NA NA NA
4  3  3  3 NA NA NA
5  4  4  4  4 NA NA
6  5  5  5  5  5 NA

df$new <- rowSums(is.na(df[1:6]))

df$new2 <- ifelse(df$new < 2, rowSums(df[1:6], na.rm = TRUE), NA)

> df
  v1 v2 v3 v4 v5 v6 new new2
1 NA NA NA NA NA NA   6   NA
2  1 NA NA NA NA NA   5   NA
3  2  2 NA NA NA NA   4   NA
4  3  3  3 NA NA NA   3   NA
5  4  4  4  4 NA NA   2   NA
6  5  5  5  5  5 NA   1   25

【讨论】:

  • 非常感谢!这真的很有帮助!
猜你喜欢
  • 2018-06-11
  • 2020-11-14
  • 1970-01-01
  • 1970-01-01
  • 2019-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
相关资源
最近更新 更多