Превратить значения в NA, если сумма переменных больше 1 - PullRequest
0 голосов
/ 09 апреля 2019

Я совсем новичок в R, поэтому, пожалуйста, прости меня, если я не использую правильный словарный запас.В настоящее время я имею дело с набором данных, где у меня есть несколько фиктивных переменных.Проблема в том, что для некоторых строк более 1 фиктивной переменной имеет значение 1. Если это так, я бы хотел установить следующую фиктивную переменную равной NA.

Я бы хотел кое-что попробовать, но не знаю с чего начать.Было бы удивительно, если бы кто-то мог мне помочь.

Заранее спасибо!

Текущие данные

df <- structure(list(Dum_1 = c(1L, NA, NA), Dum_2 = c(NA, 1L, NA), 
    Dum_3 = c(NA, 1L, 1L)), row.names = c(NA, -3L), class = c("tbl_df", 
"tbl", "data.frame"))

# A tibble: 3 x 3
  Dum_1 Dum_2 Dum_3
  <int> <int> <int>
1     1    NA    NA
2    NA     1     1
3    NA    NA     1

Ожидаемый результат

# A tibble: 3 x 3
  Dum_1 Dum_2 Dum_3
  <int> <int> <int>
1     1    NA    NA
2    NA     1    NA
3    NA    NA     1

1 Ответ

0 голосов
/ 09 апреля 2019

при условии, что ваши данные хранятся в виде фрейма данных в объекте с именем df, это должно работать:

df2 <- apply(df,1,function(x) {
  first_one <- min(which(x == 1))
  x[1:length(x)] <- NA
  x[first_one] <- 1
  print(x)
})

df2

Это предполагает, что df выглядит следующим образом:

df <- tibble::tribble(
  ~`Dum 1`,     ~`Dum 2`,    ~`Dum 3`,
  1,        NA,        NA,
  NA,       1,         1,
  NA,      NA,        1
) %>% as.data.frame()

df

   Dum 1 Dum 2 Dum 3
1     1    NA    NA
2    NA     1     1
3    NA    NA     1
...