我正在看一个大型的野生动物测量数据集,这是我读到R中的一个excel文件。由于测量了成千上万的个体动物,因此数据中存在许多错误,这些错误是没有逻辑意义的。例如,通常重22-32克的动物体重记录为610克。除了不合逻辑之外,这还使我制作的每张图的比例都降低了。
我尝试了许多方法来用NA代替这些数据点。我使用以下代码从权重的原始列中创建了一个新列:
index <- which(row.names(df1) %in% row.names(df2))
df1_common_rows <- df1[index,]
对于每个错误数据点,我都会想到的原始excel文件中的每个排列(“ 610.0”,“ 610.0”,“ 610”,“ 610”,“ 610”)都重复此操作。这行不通:当我在新的“净重”列上运行unique()时,我尝试删除的所有数据点都返回了。
我安装了naniar,然后以这种方式再次尝试了代码:
original.dataset[, weight_clean:= ifelse(Weight=="610.0", NA, Weight)]
完整代码具有所有错误数据点的所有排列。
这也不起作用。在运行此代码后,在“净重”列上运行unique()时,所有错误的数据点仍会出现。
我觉得答案就在我的鼻子底下,但是我的研究和编码尝试没有帮助。我想念什么?
答案 0 :(得分: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 |