我正在尝试在R中执行此算法:
数据名称:EPIC_26
对于第1到第6列,如果仅缺少1个值,则将其余5行的值相加,以形成另一列;如果缺少1个以上,则返回该列的missing / na。
我假设必须执行以下条件才能得出结果,计算第1列至第6列每行缺失值的数量,如果为0,则将所有6个值相加;如果为1,则忽略该缺失值,并将所有其他5相加;否则,如果大于1,则返回丢失。
我尝试过is.na()函数,但是我不知道如何为数据选择定义的列。请帮我解决这个问题。非常感谢!
答案 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