Удалить запись переменной при условии существования другой - R - PullRequest
0 голосов
/ 08 ноября 2019

Я бы хотел исключить записи для Var3, если в Var4 есть запись, используя R. Ниже я предоставляю Stata-код, приводящий к желаемому результату:

Если Var4 не равен «NA»Я хотел бы изменить запись для Var3 на «NA».

DF в R:

Var1 Var2    Var3     Var4 
 a    a      Yes       No
 b    c      No        Yes
 a    b      Yes      "NA"
 c    a      Yes      "NA"            
 b    b      No        Yes

Команда Stata:

If Var4 != "NA" -> drop Var3

Желаемый результат:

Var1 Var2    Var3     Var4 
 a    a      "NA"      No
 b    c      "NA"      Yes
 a    b       Yes     "NA"
 c    a       Yes     "NA"            
 b    b      "NA"      Yes

То, что я пробовал до сих пор, но не получилось:

test <- if(df$Var4 != is.na()) {
      test <- df[df$Var3] <- NA
      }

Исходя из моего df, я хотел бы применить эквивалент команды Stata, указанной выше. Проблема, с которой я сталкиваюсь - это объявление и интеграция команды is.na (). Я с удовольствием объясню свою проблему в случае необходимости.

Большое спасибо.

Ответы [ 2 ]

5 голосов
/ 08 ноября 2019

Это даст вам то, что вы хотите:

df[!is.na(df$Var4),]["Var3"] <- NA

#     Var1 Var2 Var3 Var4
# 1    a    a <NA>   No
# 2    b    c <NA>  Yes
# 3    a    b  Yes <NA>
# 4    c    a  Yes <NA>
# 5    b    b <NA>  Yes

Данные

df <- structure(list(Var1 = structure(c(1L, 2L, 1L, 3L, 2L), .Label = c("a", 
"b", "c"), class = "factor"), Var2 = structure(c(1L, 3L, 2L, 
1L, 2L), .Label = c("a", "b", "c"), class = "factor"), Var3 = structure(c(2L, 
1L, 2L, 2L, 1L), .Label = c("No", "Yes"), class = "factor"), 
    Var4 = structure(c(1L, 2L, NA, NA, 2L), .Label = c("No", 
    "Yes"), class = "factor")), class = "data.frame", row.names = c(NA, 
-5L))
0 голосов
/ 08 ноября 2019

Мы также можем использовать replace

df$Var3 <- replace(df$Var3, !is.na(df$Var4), NA)
df

#  Var1 Var2 Var3 Var4
#1    a    a <NA>   No
#2    b    c <NA>  Yes
#3    a    b  Yes <NA>
#4    c    a  Yes <NA>
#5    b    b <NA>  Yes

Если у вас есть NA в качестве строк

df$Var3 <- replace(df$Var3, df$Var4 != "NA", NA)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...