坚持写东西真的不容易,已经停更好久了,哎!
用R查找数据是常有的事情,例如:我想知道A列的空值(NA)或者0或者异常值在哪一行,当然1000行内的扫一眼就好,如果上万行的怎么办呢?
1. 数据列介绍
我这里有个5W+行24列的数据列
> dim(ms_data3)
[1] 509823 24
> str(ms_data3)
'data.frame': 509823 obs. of 24 variables:
$ X : int 1 2 3 4 5 6 7 8 9 10 ...
$ station : int 53959 53959 53959 53959 53959 53959 53959 53959 53959 53959 ...
$ time : Factor w/ 12053 levels "1987-1-1","1987-1-10",..: 7671 7682 7693 7696 7697 7698 7699 7700 7701 7672 ...
$ year : int 2008 2008 2008 2008 2008 2008 2008 2008 2008 2008 ...
$ month : int 1 1 1 1 1 1 1 1 1 1 ...
$ day : int 1 2 3 4 5 6 7 8 9 10 ...
$ precipitation: num 0 0 0 0 0 0 0 0 0 0.1 ...
$ meanTem : num -2.2 -3.6 0.3 0 -0.7 -1.1 1.2 1.1 0.9 1.6 ...
$ sunshine : num 6.9 7.3 7.5 1.7 4 1.4 4.8 6.6 1.1 0 ...
$ minTem : num -7.8 -9.7 -3.9 -3.6 -7.3 -6.1 -4.5 -3.8 -4.5 0.1 ...
2. 问题及解决办法
我的数据列是个气象数据列,计算时发现平均温度有问题,有异常值,因此需要找出异常值的确切位置,
ms_data3[which(ms_data3$meanTem>100),]
X station time year month day precipitation meanTem sunshine minTem maxTem site province city
66613 66613 57042 2006-5-17 2006 5 17 0.0 3276.6 11.9 11.9 30.6 hh 陕西省 富平县
68224 68224 57042 2010-10-14 2010 10 14 0.0 3276.6 7.4 11.1 24.0 hh 陕西省 富平县
70714 70714 57042 2017-8-8 2017 8 8 0.1 3276.6 10.7 18.6 33.5 hh 陕西省 富平县
77902 77902 57043 2005-4-13 2005 4 13 0.0 3276.6 11.2 2.8 23.5 hh 陕西省 大荔市
77903 77903 57043 2005-4-14 2005 4 14 0.0 3276.6 11.0 11.4 26.4 hh 陕西省 大荔市
78908 78908 57043 2008-1-14 2008 1 14 0.0 3276.6 0.0 -6.2 -3.4 hh 陕西省 大荔市
78909 78909 57043 2008-1-15 2008 1 15 0.4 3276.6 0.0 -6.1 -0.8 hh 陕西省 大荔市
78923 78923 57043 2008-1-29 2008 1 29 0.0 3276.6 7.3 -8.2 -3.4 hh 陕西省 大荔市
82401 82401 57043 2017-8-7 2017 8 7 0.0 3276.6 3276.6 21.5 28.6 hh 陕西省 大荔市
82402 82402 57043 2017-8-8 2017 8 8 0.4 3276.6 12.0 20.4 33.4 hh 陕西省 大荔市
ms_data3[which(ms_data3$meanTem==3276.6),]
X station time year month day precipitation meanTem sunshine minTem maxTem site province city
66613 66613 57042 2006-5-17 2006 5 17 0.0 3276.6 11.9 11.9 30.6 hh 陕西省 富平县
68224 68224 57042 2010-10-14 2010 10 14 0.0 3276.6 7.4 11.1 24.0 hh 陕西省 富平县
70714 70714 57042 2017-8-8 2017 8 8 0.1 3276.6 10.7 18.6 33.5 hh 陕西省 富平县
77902 77902 57043 2005-4-13 2005 4 13 0.0 3276.6 11.2 2.8 23.5 hh 陕西省 大荔市
查找空值位置
> ms_data3[which(is.na(ms_data3$precipitation)),]
X station time year month day precipitation meanTem sunshine minTem maxTem site province city
15 15 53959 2008-1-15 2008 1 15 NA -4.3 0.0 -6.5 -1.1 hh 山西省 运城市
22 22 53959 2008-1-22 2008 1 22 NA -3.8 0.0 -5.6 -1.1 hh 山西省 运城市
89 89 53959 2008-3-29 2008 3 29 NA 11.1 0.0 8.1 14.6 hh 山西省 运城市
130 130 53959 2008-5-9 2008 5 9 NA 17.3 7.2 12.4 24.9 hh 山西省 运城市
137 137 53959 2008-5-16 2008 5 16 NA 26.6 8.8 15.7 34.7 hh 山西省 运城市
138 138 53959 2008-5-17 2008 5 17 NA 24.1 6.0 19.9 30.2 hh 山西省 运城市
3. 延伸
查找到了精确位置,鉴于数据的连续型,直接删除行不是个好办法,取前后两天的平均值应该最为理想,所以该如何去设计下哩?
看完如果对你有帮助,感谢点赞支持!
如果你是电脑端,看到右下角的 “一键三连” 了吗,没错点它[哈哈]