根据其他列提取值

时间:2018-06-08 13:24:39

标签: r

我在R中有这个数据。

Stops   Reasons
1       Pollution
NA      Pesticide
NA      Pesticide
0       NA
0       NA

我想根据列Stops(当此值为1时)提取列Reasons的值。但是,当我这样做时,它也提取原因的值,其中Stops具有NA。

所以我得到了

Reasons
Pollution
Pesticide
Pesticide

但我只想要

Reasons
Pollution

我做了这个

reasons=dataW$Reason[dataW$Stops==1]

reasons= dataW[dataW$Stops==1, "Reasons"]

但我不知道还缺少什么。 你能救我吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

可能是由于NA元素返回带有==的NA。我们可以使用%in%

dataW$Reason[dataW$Stops %in% 1]
#[1] "Pollution"

或使用is.na修复OP的代码

dataW$Reason[dataW$Stops == 1 & !is.na(dataW$Stops)]
#[1] "Pollution"

数据

dataW <- structure(list(Stops = c(1L, NA, NA, 0L, 0L), Reasons = c("Pollution", 
"Pesticide", "Pesticide", NA, NA)), .Names = c("Stops", "Reasons"
), row.names = c(NA, -5L), class = "data.frame")

答案 1 :(得分:0)

在子集化时使用NA函数排除subset的一种方法

subset(dataW, Stops == 1)$Reasons

输出比较

dataW <- data.table::fread("
Stops   Reasons
1       Pollution
NA      Pesticide
NA      Pesticide
0       NA
0       NA
", data.table = F)

dataW$Reason[dataW$Stops == 1]
# [1] "Pollution" NA          NA  
subset(dataW, Stops == 1)$Reasons
# [1] "Pollution"