我期待在一个大的数据集的拍摄野生动物是一个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")))
完整的代码具有所有错误的数据点的所有排列。
这也没有奏效。当我运行此代码后运行的“干净重量”一栏唯一的(),所有的数据点大侠仍然出现。
我觉得答案是正确的在我的鼻子,但我的研究和编码的尝试并没有帮助。我在想什么?
作为@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 |