我想使用ifelse()
并在R中包含NA
来运行循环。这是我的名为DATA
的数据集的示例:
[,1] [,2] [,3] [,4]
ID1 NA NA NA
ID2 0 0 0
ID3 1 1 1
ID4 0 0 1
ID5 1 1 0
ID6 0 NA 1
ID7 NA 0 0
ID8 NA 1 1
基本上,我想使用以下条件在末尾添加新列:
我曾想使用类似的方法,但这是行不通的。它返回:
"NA" if there is no "1", but at least one "0", instead of
"NOTHING"
第6行的示例:
*ifelse(any((DATA[6,c(2:4)])==1), "1", ifelse(any((DATA[6,c(2:4)])==0), "0",
"NOTHING"))*
我真的不想返回“什么都没有” 。实际上,我要“不适用” ,但要 验证“ NA”是否是某些无效的结果,我使用了 “没有”。我也想遍历数据集中的每一行,但是我也不是很擅长。
答案 0 :(得分:1)
rowSums.na <-
function(x, na.rm = T){
suma <- rowSums(x, na.rm = na.rm)
ind <- apply(x, 1, function(el){ all(is.na(el)) })
suma[ind] <- NA
return(suma)
}
df1$newCol<- +(rowSums.na(df1[,2:4]) > 0)
#> df1$newCol
#[1] NA 0 1 1 1 1 0 1
df1
是您的数据。rowSums
时, normal sum
/ NA
返回0。海事组织这是一个很大的错误。评估:
rowSums(matrix(NA, 3, 3), na.rm = T)
rowSums.na(matrix(NA, 3, 3))
+( ... )
会将布尔值转换为数字类型。在R控制台中运行+( c(TRUE, FALSE, TRUE) )
。