R 根据条件替换值

R 根据条件替换值,r,dataframe,R,Dataframe,我试图替换如下表中所示的值 如果A是NA,B和C也将A设置为未知。 如果A为NA且B或C已获得值,则将A设置为缺失值 我试过一些 if(is.na(ColumnA)) ColumnB[is.na(ColumnB)] <= "Not Important" if(is.na(ColumnA)) ColumnB[!is.na(ColumnB)] <= "Unknown" 但我没有得到任何结果 有人能帮我解决这个问题吗?我希望我能很好地描述我的问题。您可以尝试以下方法,其中df是您的数

我试图替换如下表中所示的值

如果A是NA,B和C也将A设置为未知。 如果A为NA且B或C已获得值,则将A设置为缺失值 我试过一些

if(is.na(ColumnA)) ColumnB[is.na(ColumnB)] <= "Not Important"  
if(is.na(ColumnA)) ColumnB[!is.na(ColumnB)] <= "Unknown"
但我没有得到任何结果

有人能帮我解决这个问题吗?我希望我能很好地描述我的问题。

您可以尝试以下方法,其中df是您的数据:

df[rowSums(is.na(df))==3,]$A <- "NotImportant"
df[with(df, is.na(A) & (!is.na(B) | !is.na(C))),]$A <- "Unknown"

#             A   B  C
#1 NotImportant  NA NA
#2      Unknown 200 NA

以下是从dplyr使用case_时如何做到这一点:

df[rowSums(is.na(df))==3,]$A <- "NotImportant"
df[with(df, is.na(A) & (!is.na(B) | !is.na(C))),]$A <- "Unknown"

#             A   B  C
#1 NotImportant  NA NA
#2      Unknown 200 NA
df <- structure(list(A = c(NA, NA), B = c(NA, 200L), C = c(NA, NA)), .Names = c("A",
"B", "C"), class = "data.frame", row.names = c("1", "2"))

library(dplyr)
df%>%
mutate(A=case_when(
 is.na(.$A)&is.na(.$B)&is.na(.$C)   ~ "Not Important",
 is.na(.$A)&(is.na(.$B)|is.na(.$C)) ~ "Unknown")
 )

              A   B  C
1 Not Important  NA NA
2       Unknown 200 NA
df$A <- ifelse(!is.na(df$A), 
                      df$A, 
                      ifelse(is.na(df$B) & is.na(df$C), 
                             "Not Important", 
                             "Missing Value"))

# A   B  C
# 1 Not Important  NA NA
# 2 Missing Value 200 NA