Замена фактических точек данных на NA - PullRequest
0 голосов
/ 04 февраля 2019

Я смотрю на большой набор данных измерений диких животных, который представляет собой файл Excel, который я прочитал в R. Поскольку измеряются тысячи отдельных животных, в данных есть многочисленные ошибки, которые не имеют логического смысла.Например, вес животного, которое обычно весит 22-32 грамма, был записан как вес 610 граммов.Помимо того, что это нелогично, это отбрасывает масштаб каждого построенного мной графика.

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

original.dataset[, weight_clean:= ifelse(Weight=="610.0", NA, Weight)]

Я повторял это для каждой перестановки из исходного файла Excel, который мог придумать («610.0», «610.0», «610 "," 610 "," 610 ") для каждой ошибочной точки данных.Это не сработало: когда я запускаю unique () для нового столбца «чистый вес», все точки данных, которые я пытался удалить, возвращаются.

Я установил naniar и снова попробовал код следующим образом:

original.dataset %>% replace_with_na(replace = list(weight_clean = c("610.0"," 610.0", "610.0 ", "610", "610 ", " 610")))

Полный код содержит все перестановки всех ошибочных точек данных.

Это тоже не сработало.Когда я запускаю unique () в столбце «чистый вес» после выполнения этого кода, все ошибочные точки данных по-прежнему отображаются.

Я чувствую, что ответ прямо у меня под носом, но мои исследования и попытки кодирования не помогли.Чего мне не хватает?

1 Ответ

0 голосов
/ 04 февраля 2019

Как и предполагал @Frank, вам следует преобразовать вес в числовое значение.
pro_tip: указание единицы измерения будет приносить дивиденды в долгосрочной перспективе

original.dataset[, weight_grams := as.numeric(Weight)]

Пока вы 'В этом случае вы, вероятно, также захотите очистить строковые столбцы

library(stringr)

## eg, for a column named "animal":
original.dataset[, animal := animal %>% 
                              to.lower() %>% 
                              str_trim() %>% 
                              str_replace_all("\\s", "_")
                ]

, тогда у вас может быть ряд логических правил

## EG:
original.dataset[animal == "etruscan_shrew" & (weight_grams <     1 | weight_grams >       3), weight_grams := NA]
original.dataset[animal == "elephant"       & (weight_grams < 90000 | weight_grams > 6500000), weight_grams := NA]
# etc ... 

Когда вы начнете печататьИз всех правил вы, вероятно, обнаружите, что будет более разумно иметь отдельный CSV (файл Excel), который можно легко импортировать и ссылаться, с тремя простыми столбцами:

animal           | min_weight_grams | max_weight_grams  |
"etruscan_shrew" |                1 |                3  |
"elephant"       |            90000 |          6500000  |

...