如何定义2列指标

时间:2019-09-13 13:34:18

标签: r dataframe

我有这些专栏

           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

2 个答案:

答案 0 :(得分:2)

一种可能是:

with(df, +(grepl("None", pass, fixed = TRUE) * utility > 0))

[1] 1 0 0 0

答案 1 :(得分:1)

假设NANA而不是字符,我们可以按如下所示获得所需的输出:

使用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))