Изменить конкретные столбцы на NA, когда другой столбец равен 0 - PullRequest
0 голосов
/ 17 января 2019

Я новичок в r, и я изо всех сил пытался сделать следующее. Если одно значение («y» в приведенном ниже примере) равно 0, я хочу изменить некоторые значения («x1» и «x2») на NA, но оставить другие без изменений («x3»). Пример:

df <- data.frame(y=c(1,0,1,1,0,0,1,0,1,0), x1=c(NA,3,4,7,NA,8,2,NA,3,7), x2=c(1,NA,4,7,5,6,NA,2,3,1), x3=c(9,5,2,4,7,2,5,8,2,2))  

Я хочу вывод:

   y x1 x2 x3
1  1 NA  1  9
2  0 NA NA  5
3  1  4  4  2
4  1  7  7  4
5  0 NA NA  7
6  0 NA NA  2
7  1  2 NA  5
8  0 NA NA  8
9  1  3  3  2
10 0 NA NA  2

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Чтобы выполнить замену во 2-м и 3-м столбцах, вы можете использовать

df[df$y == 0, 2:3] <- NA

или указать столбцы по имени

df[df$y == 0, c("x1", "x2")] <- NA

В качестве альтернативы, используя library(data.table), мыможно сделать

setDT(df)[y==0, c('x1','x2') := NA]
0 голосов
/ 17 января 2019

Мы можем использовать mutate_at от dplyr

library(dplyr)
df %>%
  mutate_at(vars(c("x1", "x2")), funs(replace(., y == 0, NA)))

#   y x1 x2 x3
#   1 NA  1  9
#2  0 NA NA  5
#3  1  4  4  2
#4  1  7  7  4
#5  0 NA NA  7
#6  0 NA NA  2
#7  1  2 NA  5
#8  0 NA NA  8
#9  1  3  3  2
#10 0 NA NA  2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...