Использование transmute_at с целочисленным столбцом во фрейме данных - PullRequest
0 голосов
/ 04 октября 2019

можно ли применить transmute_at к столбцу целых чисел в кадре данных, не получив сообщение об ошибке?

Есть ли другой вариант, кроме предварительного изменения этого конкретного столбца с двойной точностью?

MWE успешного приложения:

df <- data.frame("date" = seq.POSIXt(as.POSIXct(format(Sys.time(),"%F %T"),tz="UTC"),length.out=20,by="min"), "a.1" = as.double(seq(1,40,2)), "a.2" = rnorm(20,1,2), "b.1"= rnorm(20,1,4), "b.2"= rnorm(20,3,4))

df %>%
    transmute_at(vars(matches('a.1|a.2')), ~ case_when(. < 1.5 ~ NA_real_,
                                                       TRUE~ .)) %>% 
    rename_at(vars(matches('a.1|a.2')), function(x) paste0(x,".clean")) %>% ## rename the clean Bs columns
    bind_cols(df[,grep("b.|date",names(df))], .) -> df.2 ##bind cols to df with clean and dirty columns

MWE отказавшего приложения

    df <- data.frame("date" = seq.POSIXt(as.POSIXct(format(Sys.time(),"%F %T"),tz="UTC"),length.out=20,by="min"), "a.1" = as.integer(seq(1,40,2)), "a.2" = rnorm(20,1,2), "b.1"= rnorm(20,1,4), "b.2"= rnorm(20,3,4))

df %>%
    transmute_at(vars(matches('a.1|a.2')), ~ case_when(. < 1.5 ~ NA_real_,
                                                       TRUE~ .)) %>% 
    rename_at(vars(matches('a.1|a.2')), function(x) paste0(x,".clean")) %>% ## rename the clean Bs columns
    bind_cols(df[,grep("b.|date",names(df))], .) -> df.2 ##bind cols to df with clean and dirty columns

Любая помощь приветствуется, спасибо,

Alex

1 Ответ

0 голосов
/ 04 октября 2019

Вот один вариант, в котором мы приводим NA к правильному типу путем умножения на один из элементов столбца

library(dplyr)
df %>%
  transmute_at(vars(matches('^a\\.[1-2]$')), 
                       list(clean = ~case_when(. < 1.5 ~ NA *.[1],
                                                    TRUE~ .)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...