如何在R中将“ NA”处理为False

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

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

假设我的临界值为5,所以我想要以下结果:

  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

我尝试了以下操作,但是第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>

设置ifelse语句以使“ NA”可以被视为“ False”的最佳方法是什么?我认为问题在于,当ifesle考虑使用“ NA”执行列或逻辑测试时,只能返回“ NA”。

这是我第一次发布此消息,因此我的格式可能非常糟糕...对此感到抱歉!

谢谢

wanglili19860813 回答:如何在R中将“ NA”处理为False

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

test$G5 <- ifelse(((test$col1 > 5) %in% TRUE | is.na(test$col1)) & ((test$col2 > 5) %in% TRUE | is.na(test$col2)),"No")

有关更多信息,请参见this post

,

对我来说,我认为最有益的方法是使用dplyr的{​​{1}}函数并明确说明应如何处理您提到的case_when案例。

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

NA

对于col1 = as.numeric(c(10,2,15,NA_real_,15)) col2 = as.numeric(c(15,NA_real_)) test <- data.frame(col1,col2) 函数和mutate函数,我正在加载case_when。如果您不熟悉dplyr,就好比带有多个条件的ifelse。每个条件后面都有一个“〜”波浪号。如果满足条件,则代字号后面会分配什么。要将“其他所有内容”设置为某个值X,请键入case_when,因为显然对于先前条件中未满足的所有其他情况,该值都被评估为true。

这应该做您想要的:

TRUE ~ "x"
,

这是一种没有ifelse或任何其他决策指令(switchcase_when)的方法。

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
,

这是另一个使用$client = new Client([ 'base_uri' => 'https://my.endpoint.com/api','headers' => [ 'Accept' => 'application/json',...other headers... ] ]); $data = [...your big slab of data...]; $response = $client->post('/kitely/path',['json' => $data]); // a string containing the results,which will depend on the endpoint // the Accept header says we will accept json if it is available // then we can use json_decode on the result $result = $response->getBody()->getContents();

的人
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 替换为NA,然后与5进行比较。

Inf
本文链接:https://www.f2er.com/3048151.html

大家都在问