Нельзя использовать функцию is.na () в функции mutate_if в r - PullRequest
0 голосов
/ 08 апреля 2020

Я пытался использовать is.na() в mutate_if(), но получаю ошибку:

Ошибка в is_logical (.p): объект 'n_day' не найден

n_day действительно в моем фрейме данных, и я подумал из-за набора аргументов is.na(), что я не могу использовать его в mutate_if(), но я не знаю, как его решить.

Вот Идея, если значение в n_day равно NA, замените его значением в n_cum в тот же день.

Любая помощь будет высоко оценена!

Мой код такой :

library(tidyverse)

t <- structure(list(city = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                       1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("a", "b"), class = "factor"), 
                    time = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 1L, 2L, 
                                       3L, 4L, 5L, 6L, 7L, 8L), .Label = c("2012/1/1", "2012/1/2", 
                                                                           "2012/1/3", "2012/1/4", "2012/2/1", "2012/2/2", "2012/2/3", 
                                                                           "2012/2/4"), class = "factor"), n_cum = c(1L, 2L, 3L, 4L, 
                                                                                                                     5L, 6L, 7L, 8L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L)), class = "data.frame", row.names = c(NA, 
                                                                                                                                                                                                                   -16L))
t

t2 <- t %>% group_by(city) %>% 
  mutate(n_day = n_cum - lag(n_cum))

t2 %>% mutate_if(is.na(n_day), n_day = n_cum)

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Вместо этого используйте условие mutate_at + if,

t2 %>% mutate_at(vars(n_day), ~ ifelse(is.na(.), n_cum, .))

В случае выбора нескольких переменных просто добавьте их соответственно в vars помощник.

1 голос
/ 08 апреля 2020

mutate_if используется для одновременного выполнения операций над несколькими столбцами ( См. Документацию ), здесь это не то, что вам нужно, поскольку вы хотите изменить только один столбец.

Вопрос может быть решен с использованием mutate и if_else:

t2 %>% mutate(n_day = if_else(is.na(n_day),n_cum,n_day))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...