如何根据R中定义的列中缺失值的数量返回行值之和?

时间:2018-07-16 13:13:09

标签: r algorithm sum

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

数据名称:EPIC_26

对于第1到第6列,如果仅缺少1个值,则将其余5行的值相加,以形成另一列;如果缺少1个以上,则返回该列的missing / na。

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

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

1 个答案:

答案 0 :(得分:0)

我首先创建一个新变量来计算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