更换实际数据点NA

问题描述 投票:1回答:1

我期待在一个大的数据集的拍摄野生动物是一个Excel文件,因为有成千上万的测量动物个体的我读入R的测量,有数据频频失误,使没有逻辑感。例如,一般重22-32克的动物的重量记录为称重610克。除了是不合逻辑的,这将引发关每个图形我做的规模。

我已经试过许多方法来获得这些数据点与NA取代。我创建使用下面的代码权重的原始列新列:

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

我重复这对于每个置换从原来的excel文件我能想到的(“610.0" ,‘610.0’,‘610’,‘610’,” 610“),为每个错误的数据点。这没有奏效:当我在新的“清洁重”列运行的唯一的(),所有我试图删除的数据点都回来了。

我安装naniar,并试图代码再次是这样的:

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

完整的代码具有所有错误的数据点的所有排列。

这也没有奏效。当我运行此代码后运行的“干净重量”一栏唯一的(),所有的数据点大侠仍然出现。

我觉得答案是正确的在我的鼻子,但我的研究和编码的尝试并没有帮助。我在想什么?

r if-statement na tidyr
1个回答
1
投票

作为@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  |

© www.soinside.com 2019 - 2024. All rights reserved.