Заменить дефис в кадре данных, используя str_replace_all - PullRequest
1 голос
/ 21 октября 2019

Я сбит с толку этой основной проблемой. У меня есть датафрейм, в котором вместо нулевых значений есть тире, например

example <- data.frame(Month = c("Jan", "Feb", "March"),
                  Units = c("100", "-", "300"),
                  stringsAsFactors = F)

Теперь я думал, что str_replace_all будет работать:

replace <- example %>%
  str_replace_all("-", "0")

Но я получаю это предупреждение:

Warning message:
In stri_replace_first_regex(string, pattern, fix_replacement(replacement),  :
  argument is not an atomic vector; coercing

Мне нужно сначала выполнить преобразование, прежде чем преобразовывать «Единицы» в числовые значения, например

replace <- example %>%
  str_replace_all("-", "0") %>%
  mutate_at(2, as.numeric)

Что я делаю не так?

Ответы [ 4 ]

1 голос
/ 22 октября 2019

Спасибо mutate_at работает для меня как мои реальные данные У меня есть 21 столбец с черточками, например

replace <- real_data %>%
    mutate_at(vars(2:22),list(~as.numeric(str_replace_all(.,'-','0')))))
1 голос
/ 21 октября 2019

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

library(dplyr)
example %>% mutate_at(vars(Units), list(~as.numeric(str_replace_all(.,'-','0')))) 
1 голос
/ 21 октября 2019

Функция stringr::str_replace_all работает с вектором, а не с целым фреймом данных:

example$Units = example$Units %>%
    str_replace_all("-", "0") %>%
    as.numeric

или

example <- example %>%
  mutate(Units = Units %>% 
           str_replace_all("-", "0") %>%
           as.numeric)

или вы можете использовать более кратко:

example$Units = readr::parse_number(example$Units)
0 голосов
/ 21 октября 2019

df <- заменить (df, df == «-«, 0) </p>

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