如何识别 R 中数据集中的不一致和异常值
How can I identify inconsistencies and outliers in a dataset in R
我有一个包含很多列的大数据集,其中大部分不是数值。我需要找到数据中的不一致以及异常值,如果数据集不是那么大(准确地说是 7032 行),那么获取不一致的部分将很容易。
不一致类似于:ID 应该是 4 个字母和 4 个数字,但我得到了其他东西(例如 3 个数字和 2 个字母);或其他示例是一个应该为 0 或 1 的数字,我得到一个 -1 或一个 2 .
有什么函数可以用来获取每列中的不一致之处吗?
对于没有数值的特定列,我想做一个正则表达式并验证某一列的每一行是否有效,但我没有找到可以给我的信息。
对于异常值的部分,我做了一个箱线图,看看我是否可以获得任何异常值,就像这样:
boxplot(dataset$column)
但是图形没有给我任何异常值。我应该接受我在图形中获得的结果还是应该尝试其他方法以查看数据中是否真的存在任何异常值?
对于您给出的具体示例:
- 一个 ID 必须是四个数字和 4 个字母:
!grepl("^[0-9]{4}-[[:alpha:]]{4}$", ID)
对于不一致的值将为 TRUE(^
和 $
分别表示开始和 end-of-string;{4}
表示“先前的模式正好重复四次”;[0-9]
表示“0 到 9 之间的任何符号(即任何数字);[[:alpha:]]
表示“任何字母字符”)。如果您只想要 大写 字母,您可以使用[A-Z]
相反(假设您不在像爱沙尼亚这样的奇怪语言环境中工作)。
如果您需要一个数值为 0 或 1,那么 !num_val %in% c(0,1)
将起作用(这将适用于任何一组允许的值;您可以将它用于特定的一组也允许字符值)
如果您需要一个介于 a
和 b
之间的数值,那么 !(a < num_val & num_val < b)
...
我有一个包含很多列的大数据集,其中大部分不是数值。我需要找到数据中的不一致以及异常值,如果数据集不是那么大(准确地说是 7032 行),那么获取不一致的部分将很容易。
不一致类似于:ID 应该是 4 个字母和 4 个数字,但我得到了其他东西(例如 3 个数字和 2 个字母);或其他示例是一个应该为 0 或 1 的数字,我得到一个 -1 或一个 2 .
有什么函数可以用来获取每列中的不一致之处吗? 对于没有数值的特定列,我想做一个正则表达式并验证某一列的每一行是否有效,但我没有找到可以给我的信息。
对于异常值的部分,我做了一个箱线图,看看我是否可以获得任何异常值,就像这样:
boxplot(dataset$column)
但是图形没有给我任何异常值。我应该接受我在图形中获得的结果还是应该尝试其他方法以查看数据中是否真的存在任何异常值?
对于您给出的具体示例:
- 一个 ID 必须是四个数字和 4 个字母:
!grepl("^[0-9]{4}-[[:alpha:]]{4}$", ID)
对于不一致的值将为 TRUE(^
和 $
分别表示开始和 end-of-string;{4}
表示“先前的模式正好重复四次”;[0-9]
表示“0 到 9 之间的任何符号(即任何数字);[[:alpha:]]
表示“任何字母字符”)。如果您只想要 大写 字母,您可以使用[A-Z]
相反(假设您不在像爱沙尼亚这样的奇怪语言环境中工作)。
如果您需要一个数值为 0 或 1,那么
!num_val %in% c(0,1)
将起作用(这将适用于任何一组允许的值;您可以将它用于特定的一组也允许字符值)如果您需要一个介于
a
和b
之间的数值,那么!(a < num_val & num_val < b)
...