“如何处理”;不适用;在R中为假

“如何处理”;不适用;在R中为假,r,if-statement,na,R,If Statement,Na,我处理的是一个大数据集,我试图在两列中调用满足条件的行。但是,我想从分析中排除某些值,我认为将它们设置为“NA”是最好的。更复杂的是,如果其中一列中有“NA”,我仍然想看看另一列的数值是否仍然满足条件。下面是我的数据集示例 col1 = as.numeric(c(10, 2, 15, 2, "NA", 15)) col2 = as.numeric(c(15, 15, 2, 2, 15, "NA")) test <- data.frame(col1, col2) 我尝试了以下内容,但第5行

我处理的是一个大数据集,我试图在两列中调用满足条件的行。但是,我想从分析中排除某些值,我认为将它们设置为“NA”是最好的。更复杂的是,如果其中一列中有“NA”,我仍然想看看另一列的数值是否仍然满足条件。下面是我的数据集示例

col1 = as.numeric(c(10, 2, 15, 2, "NA", 15))
col2 = as.numeric(c(15, 15, 2, 2, 15, "NA"))
test <- data.frame(col1, col2)
我尝试了以下内容,但第5行和第6行返回为“NA”,我不知道如何解决这个问题

test$G5 <- ifelse(test$col1 > 5 & test$col2 > 5, "Yes", "No")

  col1 col2   G5
1   10   15  Yes
2    2   15   No
3   15    2   No
4    2    2   No
5   NA   15 <NA>
6   15   NA <NA>
test$G5和test$col2>5,“是”、“否”)
col1 col2 G5
1015是的
2 15号
3 15 2否
4 2 2不
5 NA 15
6 15 NA
设置ifelse语句以便将“NA”视为“False”的最佳方法是什么?。我认为问题在于,当ifesle考虑任一列并且逻辑测试使用“NA”执行时,它只能返回“NA”

这是我第一次发布这个,所以我的格式可能很糟糕。。。对不起

谢谢您

测试$G5和测试$col2>5)%TRUE%中的“是”、“否”)

%TRUE | is.na(test$col1))中的
test$G5%
有关更多信息,请参见%TRUE“是”、“否”中的测试$G5和测试$col2>5)%code>

%TRUE | is.na(test$col1))中的
test$G5%

请参阅以了解更多信息,我认为最有益的方法是在功能时使用
dplyr
case\u,并明确说明您提到的
NA
案例应如何处理

复制您的示例(注意,我在这里显式设置了NAs。您的NAs是R无法处理数字向量中的字符串(“NA”)的结果

col1 = as.numeric(c(10, 2, 15, 2, NA_real_, 15))
col2 = as.numeric(c(15, 15, 2, 2, 15, NA_real_))
test <- data.frame(col1, col2)

对我来说,我认为最有益的方法是在
函数时使用
dplyr
case\u,并明确说明应该如何处理您提到的
NA
案例

复制您的示例(注意,我在这里显式设置了NAs。您的NAs是R无法处理数字向量中的字符串(“NA”)的结果

col1 = as.numeric(c(10, 2, 15, 2, NA_real_, 15))
col2 = as.numeric(c(15, 15, 2, 2, 15, NA_real_))
test <- data.frame(col1, col2)

这是一种没有
ifelse
或任何其他决策指令(
开关
case\u当
时)的方法

i5&col2>5)| is.na(col1)| is.na(col2))

测试$G5这是一种没有
ifelse
或任何其他决策指令(
开关
案例_当
时)的方法

i5&col2>5)| is.na(col1)| is.na(col2))

测试$G5这里是另一个使用
rowSums

test$G5 <- c("No", "Yes")[(rowSums(is.na(test) | test > 5) == ncol(test)) + 1]
test

#  col1 col2  G5
#1   10   15 Yes
#2    2   15  No
#3   15    2  No
#4    2    2  No
#5   NA   15 Yes
#6   15   NA Yes

下面是另一个使用
rowSums

test$G5 <- c("No", "Yes")[(rowSums(is.na(test) | test > 5) == ncol(test)) + 1]
test

#  col1 col2  G5
#1   10   15 Yes
#2    2   15  No
#3   15    2  No
#4    2    2  No
#5   NA   15 Yes
#6   15   NA Yes

测试$G5)|是.na(测试$col2)和(测试$col1>5)|!是.na(test$col1 | test$col2)和(test$col2>5和test$col2>5),“是”、“否”)可能是@ShirinYavari的重复项吗?我认为您处理了
na
的反向操作,它们应该以“否”结尾。如果我有这个,请纠正我wrong@astrofunkswag根据问题所示,答案是对的,但你的答案是相反的。哎呀,哎呀?!哦,我看到了帖子的这一部分,这是OP想要的,但这与将
NA
视为false不一致,它应该被忽略/视为truetest$G5 5)| is.NA(test$col2)&(test$col1>5)|!是.na(test$col1 | test$col2)和(test$col2>5和test$col2>5),“是”、“否”)可能是@ShirinYavari的重复项吗?我认为您处理了
na
的反向操作,它们应该以“否”结尾。如果我有这个,请纠正我wrong@astrofunkswag根据问题所示,答案是对的,但你的答案是相反的。哎呀,哎呀?!哦,我看到了帖子的这一部分,这是OP想要的,但这与将
NA
视为false不一致,应该将其忽略/视为true
i <- with(test, (col1 > 5 & col2 > 5) | is.na(col1) | is.na(col2))
test$G5 <- c("No", "Yes")[i + 1]

test
#  col1 col2  G5
#1   10   15 Yes
#2    2   15  No
#3   15    2  No
#4    2    2  No
#5   NA   15 Yes
#6   15   NA Yes
test$G5 <- c("No", "Yes")[(rowSums(is.na(test) | test > 5) == ncol(test)) + 1]
test

#  col1 col2  G5
#1   10   15 Yes
#2    2   15  No
#3   15    2  No
#4    2    2  No
#5   NA   15 Yes
#6   15   NA Yes
test[is.na(test)] <- Inf
test$G5 <- c("No", "Yes")[(rowSums(test > 5) == ncol(test))+ 1]