我有这些专栏
utility pass
2 None
3 NA
-1 None
-2 NA
如果:pass = None并且实用程序> 0 ,则指标为1
输出
我有这些专栏
utility pass indicator
2 None 1
3 NA 0
-1 None 0
-2 NA 0
答案 0 :(得分:2)
一种可能是:
with(df, +(grepl("None", pass, fixed = TRUE) * utility > 0))
[1] 1 0 0 0
答案 1 :(得分:1)
假设NA
是NA
而不是字符,我们可以按如下所示获得所需的输出:
使用dplyr
(可以使用case_when
):
df %>%
mutate(indicator = ifelse( !is.na(pass) & utility >0 , 1, 0))
utility pass indicator
1 2 None 1
2 3 <NA> 0
3 -1 None 0
4 -2 <NA> 0
在不依赖外部软件包的情况下,我们可以使用base
软件包执行以下操作:
df$indicator <- ifelse( !is.na(df$pass) & df$utility >0 , 1, 0)
使用within
:
within(df, {
indicator <- ifelse(!is.na(pass) & utility >0, 1, 0)
})
utility pass indicator
1 2 None 1
2 3 <NA> 0
3 -1 None 0
4 -2 <NA> 0
数据:
df <- structure(list(utility = c(2L, 3L, -1L, -2L), pass = structure(c(1L,
NA, 1L, NA), .Label = "None", class = "factor")), class = "data.frame", row.names = c(NA,
-4L))