R: заменить последние 3 нуля на K в столбце - PullRequest
1 голос
/ 31 мая 2019

Я пытаюсь заменить последние 3 000 на K в столбце в кадре данных

например:

data <- data.frame(abc = c(1000, 100000, 450000))

abc <- 1000
then abc <- 1K

if 
abc <- 100000
then abc <- 100K

gsub или регулярное выражение заменяет первые 3 нуля

Я пробовал это:

lapply(data$abc, gsub, pattern = "000", replacement = "K", fixed = TRUE)

Кроме того, как я могу заставить его работать на интервале как:

data <- data.frame(abc = c("150000-250000", "100000-150000", "250000K+"))

Ответы [ 2 ]

4 голосов
/ 31 мая 2019

Можно использовать %/% с 1000 и вставить "K"

library(dplyr)
library(stringr)
data %>%
   mutate(abc = str_c(abc %/% 1000, "K"))

Или, используя sub, сопоставить 3 нуля в конце ($) изстроку и замените на "K"

options(scipen = 999)
sub("0{3}$", "K", data$abc)
#[1] "1K"   "100K" "450K"

Если у нас другая строка с интервалом, измените шаблон так, чтобы он совпадал с 3 нулями в конце ($) или перед -и заменить на «К»

gsub("0{3}(?=-|$)", "K", "150000-250000", perl = TRUE)
#[1] "150K-250K"
1 голос
/ 31 мая 2019

Вот небольшая модификация вашего кода. format - отключить научную запись. sapply делает вывод становится вектором. 000$ означает совпадать только с теми, кто в конце.

data <- data.frame(abc = c(1000, 100000, 450000))

data$abc <- format(data$abc, scientific = FALSE)

gsub(pattern = "000$", replacement = "K", data$abc)
# [1] "  1K" "100K" "450K"
...