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

问题描述 投票:0回答:2

如果要根据条件用NA替换某些变量,使用的最佳函数是什么?enter image description here

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

尝试:

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

提前感谢

r conditional-statements na
2个回答
0
投票

您可以通过找出数据帧中的哪些行为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

0
投票

一种选择是在“状态”中找到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))
© www.soinside.com 2019 - 2024. All rights reserved.