R 数据分析(1) aggregate()和if()中的向量
R aggregate() 的使用
像这种数据:
Rain: Hourly
Station,Date(NZST),Time(NZST),Amount(mm),Period(Hrs),Freq
22719,20160101,0000,0.0,1,H
37852,20160101,0000,0.0,1,H
22719,20160101,0100,0.0,1,H
37852,20160101,0100,0.0,1,H
22719,20160101,0200,0.0,1,H
37852,20160101,0200,0.0,1,H
22719,20160101,0300,0.0,1,H
37852,20160101,0300,0.0,1,H
22719,20160101,0400,0.0,1,H
37852,20160101,0400,0.0,1,H
22719,20160101,0500,0.0,1,H
37852,20160101,0500,0.0,1,H
22719,20160101,0600,0.0,1,H
37852,20160101,0600,0.0,1,H
22719,20160101,0700,0.0,1,H
.......
是按每个小时来统计降雨量的,而且每个小时还分两个站点,如果我们想获得每天的降雨量应该怎么办呢?
通过各种途径的查找,aggregate()函数可以轻松做到
用以下代码:
#rain_tmp是我的dataframe名字
rain_sum<-aggregate(Amount.mm. ~ Date.NZST.,data=rain_tmp,sum)
意思就是按照所有相同的Date.NZST这一列,把对应的Amount.mm.相加
结果是,获得了一个只包含Date.NZST和Amount.mm.两列的数据,每个Date只出现一次。
if()条件判断中使用向量会出现的问题
如果我们这样写:
test<-function(c){
if(c>=10){
return ("a")
}
else{
return ("b")
}
}
test(c)
期望得到的是一个向量("b","b","b","a")
但是得到的会是一个字符"b",因为函数只用了向量c的第一个元素
> test(c)
[1] "b"
Warning message:
In if (c >= 10) { : 条件的长度大于一,因此只能用其第一元素
test2<-function(c){
return(c>=10)
}
test2(c)
> test2(c)
[1] FALSE FALSE FALSE TRUE
再对向量中的TRUE和FALSE进行处理得到a和b

浙公网安备 33010602011771号