Замена "," на "."в нескольких значениях столбца в кадре данных - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть таблица данных с несколькими столбцами.Некоторые из них представляют собой символьные столбцы, в которых числовые измерения / индексы имеют значения, подобные "12,3" или "1,02".Десятичные знаки вместо запятой.

Я бы с удовольствием зациклился на каждом из этих символьных / числовых столбцов и заменил запятые на десятичную для дальнейшей подготовки данных к анализу.

Я бы хотел использовать tidyverse функции и что-то вроде gsub.Вот одна из моих многочисленных попыток:

     chr.cols <- c('Agriculture', 'Industry', 'Service', 'Crops (%)', 'Other (%)', 
          'Arable (%)', 'Phones (per 1000)', 'Net migration', 'Coastline
          (coast/area ratio', 'Pop. Density (per sq. mi.)')

     countries_df <- for(y in colnames(countries)) { 
          gsub(pattern = ",", replacement = ".", x = countries$y)
     }

Ответы [ 3 ]

0 голосов
/ 14 декабря 2018

Один из подходов состоит в том, чтобы вкладывать два вызова в sub.Первый вызов нацелен на разделители тысяч и заменяет точку запятой.Затем вторая замена нацеливается на возможную десятичную точку в конце строки.

val <- "1.234.567,123"
gsub(",(?=\\d{3}$)", ".", gsub("\\.", ",", val), perl=TRUE)

[1] "1,234,567.123"

Более идеальным решением может быть использование форматирования локали с использованием некоторого R API.

0 голосов
/ 14 декабря 2018

Вам нужно будет сохранить результаты замены вашего шаблона (gsub) обратно в ваш набор данных (или, для лучшей практики, в новый набор данных).Кроме того, имена столбцов должны вызываться в формате [row, column], чтобы избежать путаницы (data$y может быть вашим индексом y или столбцом с именем y).

## Duplicating the dataset
countries_modified <- countries

## Looping through the columns
for(y in 1:ncol(countries)) { 
     countries_modified[, y] <- gsub(pattern = ",", replacement = ".", x = countries[, y])
}
0 голосов
/ 14 декабря 2018

Если мы не выполняем никаких заданий, значения не заменяются.Создайте копию исходного набора данных ('country_df'), если мы хотим сохранить исходные данные, и используем [[ вместо $

countries_df <- countries 
for(y in chr.cols) { 
   countries_df[[y]] <- gsub(pattern = ",", replacement = ".",
            x = countries_df[[y]])
   } 

Обратите внимание, что здесь мы используем [[ вместо[, чтобы он по-прежнему работал для наборов данных, имеющих класс tbl_df, data.table и т. Д.

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