Удаление знака% из строк и преобразование их в число - PullRequest
1 голос
/ 23 мая 2019

Я пытаюсь удалить знак% из моих данных и преобразовать их в числовые, а затем выполнить деление на них.Это мои данные, в них есть номера деталей в количестве и другие в%.

enter image description here

Я попробовал следующий код, чтобы удалить знак%, а затем преобразоватьих на номера.Однако я хочу выполнить деление только на преобразованные числа.В любом случае, где я могу проверить и выполнить деление только для тех строк, в которых есть знак%?

Это мой код

#Reading Files

tab1_data <-  read_excel("Dataset.xlsx", sheet = "tab1")
tab2_data <-  read_excel("Dataset.xlsx", sheet = "tab2")

#tab1_data$new <- subset(tab1_data$`Click percent`,grep("\\%$", tab1_data$`Click percent`))

d = as.numeric(gsub("\\%", "", tab1_data$`Click percent`))

Это вывод этого преобразованного столбца:enter image description here

сейчас, здесь число 1.14000 в идеале должно быть 0,01146, но это не так.Я попытался установить значения% в новом столбце, а затем выполнить их деление.однако я не могу их установить.

Может ли кто-нибудь предложить какой-либо альтернативный способ достижения конечной цели удаления знака% и последующего деления над ними.

Ответы [ 2 ]

2 голосов
/ 23 мая 2019

Предположим, что x - это ваш столбец,

x <- c(0.02, 0.011, '1.14%', '1.309%')

затем,

x[grepl('%', x)] <- as.numeric(gsub('%', '', x[grepl('%', x)])) / 100
x
#[1] "0.02"    "0.011"   "0.0114"  "0.01309"

или

as.numeric(x)
#[1] 0.02000 0.01100 0.01140 0.01309
1 голос
/ 23 мая 2019

Интересный вариант с readr::parse_number(x) с использованием данных @Sotos

x <- c(0.02, 0.011, '1.14%', '1.309%')
readr::parse_number(x) / c(1, 100)[grepl("%", x) + 1] 
#[1] 0.0200 0.0110 0.0114 0.0131

Это делит на 100, если присутствует % или с 1 в противном случае.

...