dplyr: заменить значения по очереди на основе значения в одной переменной - PullRequest
0 голосов
/ 27 января 2020

Я хочу исключить участников из анализа, который слишком стар (возраст> 90). Обычно я делаю это так:

df <- data.frame(age=c(1,10, 100), x= 1:3, y= 1:3)
df[df$age > 90, ] <- NA

Я не могу понять, как это сделать с помощью dplyr. Если мы хотим заменить одну переменную, мы можем использовать

library(dplyr)
df <- data.frame(age=c(1,10, 100), x= 1:3, y= 1:3)
df %>%
  mutate(age= replace(age, age> 90, NA))

Поэтому я подумал, что мог бы использовать

df %>%
  mutate_all(function(i) replace(i, age> 90, NA))

Я также попытался mutate_if и mutate_at, но это не сработало , После прочтения вопросов по SO я думаю, что «проблема» заключается в том, что в моей ситуации мне нужно изменить значения в ряд с помощью dplyr.

Ответы [ 2 ]

2 голосов
/ 27 января 2020

Вам необходимо расположить столбцы таким образом, чтобы тестовый столбец (age) был последним.

library(dplyr)
df %>%
  select(x, y, age) %>%
  mutate_all(~replace(.x, age> 90, NA))

#   x  y age
#1  1  1   1
#2  2  2  10
#3 NA NA  NA
1 голос
/ 27 января 2020
library(dplyr)

df <- data.frame(age=c(1,10, 100), x= 1:3, y= 1:3)
df[df$age > 90, ] <- NA


df %>%
    mutate_all(function(i) replace(i, .$age> 90, NA))

  age  x  y
1   1  1  1
2  10  2  2
3  NA NA NA

Просто чтобы быть уверенным. Вы говорите, вы хотите исключить их. Я предполагаю, что вы на самом деле, возможно, хотите это:

df %>%
    filter(age <= 90)

  age x y
1   1 1 1
2  10 2 2

?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...