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

posted @ 2020-05-28 22:09  Raybu  阅读(331)  评论(0)    收藏  举报