Данные округления, включающие пробелы - PullRequest
0 голосов
/ 19 марта 2020

Пример таблицы, с которой я работаю, выглядит следующим образом:

Column 1                      Column 2
300.82                          100.000000001
5578.76                         2000.98
932.00000000001                 6876.54
167                             -
900.01                          -
765.9999999999999995            -
100.00                          999.999999991
-                               8765.82
0.000001                        -
-                               67876.25
-                               25.67
5000.919999999                  900.93
760.84999999                    26.27
-                               11.97
100.98                          -

Я пытался использовать data <- round(data, 2), но он выдает ошибку "non-numberri c variable (s) во фрейме данных. "

Я попытался включить na.rm=TRUE, но функция round () не принимает второй параметр.

Итак, я не уверен, как округлить экстремум (. 00000001, .9999999995) введите значения без удаления значений -.

Ответы [ 3 ]

3 голосов
/ 19 марта 2020

Ваши данные не являются цифрами c - в противном случае пропущенные значения будут представлены как NA, и ваша попытка round будет работать нормально.

Вам необходимо преобразовать данные к цифре c. Если это класс character, вы можете go прямо с as.numeric(), но если это класс factor, используйте as.numeric(as.character()). Вы должны будете сделать это для каждого столбца, который вы хотите преобразовать, либо с помощью oop, либо lapply, либо с чем-то, что перебирает столбцы. Если вы хотите преобразовать все ваши столбцы, вы можете выполнить одно из следующих действий:

data = lapply(data, function(x) as.numeric(as.character(x)))

library(dplyr)
data = mutate_all(data, ~as.numeric(as.character(x)))

Вы всегда должны убедиться, что ваши данные имеют правильный тип. Вы можете указать классы столбцов при импорте данных, а также настроить, какие значения следует обрабатывать как NA (проверьте документацию по любой функции, которую вы использовали для импорта данных, найдите na.strings в большинстве функций или na аргумент в readr функциях), вы можете проверить классы столбцов, например, с помощью str(data) или dplyr::glimpse(data) или sapply(data, class), или, взглянув на вкладку "среда" в RStudio, убедиться, что все именно так, как и должно быть .

1 голос
/ 19 марта 2020

Вот базовое решение R.

#Transform column data to numeric, this will set as NA all the "-"
#and round the numbers to the desired number of decimals
df$Column_1<-round(as.numeric(df$Column_1),2)

#Then substitute NA with "-"
df$Column_1[is.na(df$Column_1)]<-"-"
1 голос
/ 19 марта 2020

Вы можете попробовать метод dplyr:

library(tidyverse)

data <- data %>%
mutate_at(vars(starts_with("Column")), funs(as.numeric(as.character(.)))) %>%
mutate_if(is.numeric, ~round(., 2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...