#r
Вопрос:
У меня есть фрейм данных, в котором некоторые значения для «дохода» указаны сотнями, скажем, «300», а другие указаны как «1,5 тыс.». Очевидно, это раздражает, поэтому мне нужно найти какой-то способ разделить символы «k» и «.» от этих значений и только от этих значений. Есть какие-нибудь мысли?
Комментарии:
1.
x <- c('300', '1.5k'); as.numeric(gsub('k', '', x)) * ifelse(grepl('k', x), 1000, 1)
Ответ №1:
Другой способ сделать это-просто с регулярным выражением (и tidyverse
для труб)
library(tidyverse)
string <- c("300", "1.5k")
string %>% ifelse(
# check if string ends in k (upper/lower case)
grepl("[kK]$", .),
# if string ends in k, remove it and multiply by 1000
1000 * as.numeric(gsub("[kK]$", "", .)),
.) %>% as.numeric()
[1] 300 1500
Ответ №2:
Вы можете создать функцию, которая удалит «k», изменит числовой вектор и умножит его на 1000.
to_1000 <- function(x){
x %>%
str_remove("k") %>%
as.numeric() %>%
{.*1000}
}
x <- c("3000","1.5k")
tibble(x) %>%
mutate(x_num = if_else(str_detect(x,"k"),to_1000(x),as.numeric(x)))
# A tibble: 2 x 2
x x_num
<chr> <dbl>
1 3000 3000
2 1.5k 1500