用NA替换某些变量,一个变量为NA

时间:2019-11-28 18:12:33

标签: r conditional-statements na

如果我想根据条件用NA替换某些变量,最好使用什么函数? enter image description here

如果状态=不适用,那么score_1:score_3将不适用

尝试:

if(df2$status == NA){
 df2$score_2 <- NA
}else{
  df2$score_2 <- df$score_2
}

预先感谢

2 个答案:

答案 0 :(得分:1)

您可以通过找出数据帧中的哪些行为NA,然后将这些行中的列设置为NA来完成此操作。

df <- data.frame(client_id = 1:4,
       Date = 1:4,
       Status = c(1, NA, 1, NA),
       Score1 = runif(4)*100,
       Score2 = runif(4)*100,
       Score3 = runif(4)*100)

idx <- is.na(df$Status)

df[idx, 4:6] <- NA

df
#>   client_id Date Status   Score1   Score2   Score3
#> 1         1    1      1 48.08677 16.62185 91.80062
#> 2         2    2     NA       NA       NA       NA
#> 3         3    3      1 14.04552 64.55724 56.45998
#> 4         4    4     NA       NA       NA       NA

答案 1 :(得分:1)

一种选择是在“状态”中找到NA,并将具有“得分”作为列名的列分配给NA中的base R

i1 <- is.na(df2$Status)
df2[i1, grep("^Score_\\d+$", names(df2))] <- NA

dplyr

中的一个选项
library(dplyr)
df2 %>%
     mutate_at(vars(starts_with('Score')), ~ replace(., is.na(Status), NA))