自动清理不良数据[重复]
Posted
技术标签:
【中文标题】自动清理不良数据[重复]【英文标题】:Clean bad data automatically [duplicate] 【发布时间】:2013-08-08 09:06:34 【问题描述】:我正在构建一个使用闪亮和露天的应用程序来分析风数据。 现在需要在用户上传数据之前“清理”数据。 我有兴趣自动执行此操作。 有些数据是空的,有些不是数字,所以不可能建立风玫瑰图。 我想:
1. 估计有多少数据不是数字 2. 把它剪掉,只留下数字数据以下是数据示例: “NO2.mg”被读取为一个因子而不是整数,因为它不仅包含数字 好的 这是一个可重现的例子:
no2<-factor(c(5,4,"c1",54,"c5",seq(2:50)))
no2
[1] 5 4 c1 54 c5 1 2 3 4 5 6 7 8 9 10 11 12 13 14
[20] 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
[39] 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
52 Levels: 1 10 11 12 13 14 15 16 17 18 19 2 20 21 22 ... c5
> as.numeric(no2)
[1] 45 34 51 46 52 1 12 23 34 45 47 48 49 50 2 3 4 5 6
[20] 7 8 9 10 11 13 14 15 16 17 18 19 20 21 22 24 25 26 27
[39] 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44
【问题讨论】:
library(fortunes);fortune(206)
。您需要提供data
的示例。即使那样......
一般来说,我们不是服务台。如果用户提出明确、具体的问题并展示他们尝试过的方法以及遇到困难的地方,我们将不胜感激。
【参考方案1】:
有史以来最差的俳句:
Some of the data is empty,
some of is not numeric,
so it is not possible to build a wind rose.
【讨论】:
被超级极客程序员群嘲讽-->检查 @eliavs - 好吧,您可以按照 Roman 的要求提供一些更相关的信息。一堆看似随机且不可重现的数字并不能让我们提供帮助。例如。 -dput(head(ranana.analysed.no2))
可能是一个好的开始,或者更好的是,显示输入数据的麻烦部分和预期输出数据集的完整示例会很有帮助。
@thelatemail 谢谢,可重复的数据对帮助很重要【参考方案2】:
要将因子转换为数字,需要先转换为字符:
no2<-factor(c(5,4,"c1",54,"c5",seq(2:50)))
no2_num <- as.numeric(as.character(no2))
#Warning message:
# NAs introduced by coercion
no2_clean <- na.omit(no2_num) #remove NAs resulting from the bad data
# [1] 5 4 54 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
# [40] 37 38 39 40 41 42 43 44 45 46 47 48 49
# attr(,"na.action")
# [1] 3 5
# attr(,"class")
# [1] "omit"
length(attr(no2_clean,"na.action"))/length(no2)*100
#[1] 3.703704
【讨论】:
【参考方案3】:好的,我就是这样做的,我相信有人有更好的方法
如果您与我分享,我会很高兴
这是我的数据:
no2<-factor(c(5,4,"c1",54,"c5",seq(2:50)))
统计“坏数据”:
sum(is.na((as.numeric(as.vector(no2)))))
并估计不良数据的百分比:
sum(is.na((as.numeric(as.vector(no2)))))/length(no2)*100
【讨论】:
as.vector
是多余的,但 sum()
-ing is.na()
是相当标准的。您是否对通过将“c5”转换为“5”来“恢复”数据感兴趣?
@DWin 因子不是向量,as.vector
将它们强制转换为字符。这里不是多余的。
有趣...没有意识到as.vector
会和as.character
做同样的事情。但这并没有改变它是多余的事实,因为它被传递给is.na
,它不在乎它是“数字”还是“字符”。考虑:sum(is.na(factor(c(letters, NA)))
。带有默认参数的as.vector.factor
函数会删除级别属性并转换为levels(fac)[fac]
。
@DWin 但as.numeric
用于因子时不会创建NA
s,仅用于角色时。
@DWin 当然as.numeric
传播NA
。但这不是创建NA
。相关案例为as.numeric(factor(c(1:3,"a")))
vs. as.numeric(as.character(factor(c(1:3,"a"))))
以上是关于自动清理不良数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章