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

R 将某些变量替换为NA,其中一个变量为NA,r,conditional-statements,na,R,Conditional Statements,Na,如果我想用基于条件的NA替换某些变量,最好使用什么函数? 如果状态=NA,则分数为1:分数为NA 尝试: if(df2$status == NA){ df2$score_2 <- NA }else{ df2$score_2 <- df$score_2 } if(df2$status==NA){ df2$score_2您可以通过找出数据框中的哪些行是NA,然后将这些行中的列设置为NA df <- data.frame(client_id = 1:4, Da

如果我想用基于条件的NA替换某些变量,最好使用什么函数?

如果状态=NA,则分数为1:分数为NA

尝试:

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

df2$score_2您可以通过找出数据框中的哪些行是
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
df2-NA-NA-NA
#> 3         3    3      1 14.04552 64.55724 56.45998
#>4不,不,不,不

一个选项是在“状态”中查找
NA
s,并将列名称为“score”的列分配给
base R中的
NA

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

谢谢!这对有几行的df有效吗?比如80行或100行?是的。idx会找到状态列的所有
NA
行。在这种情况下,我必须知道变量的位置,对吗?我有很多变量必须用NA替换,但它们不符合顺序。我应该先排序吗?如果是多个变量,y您必须按位置或名称知道要替换的对象。@akruns answer提供了一种方法,通过匹配列名而不是按位置来进行替换。谢谢,我一直收到错误消息,说对象状态不匹配exist@DanielleTravassos在您的图像中,它显示
状态
,而在您的代码中它是
状态
。R区分大小写。因此,请将名称更改为正确的列名。我更新了codeHi Akrun,谢谢。这是状态,我仍然收到此消息。我可能做错了什么?@DanielleTravassos你能发布'df2'
colnames(df2)的列名吗
。可能有一些领先/落后的空间。这非常有效。谢谢@akrun和@Jake!我希望我能选择两个答案,因为它们都很有用!
library(dplyr)
df2 %>%
     mutate_at(vars(starts_with('Score')), ~ replace(., is.na(Status), NA))