关于计算r中的行和列

时间:2015-04-25 19:51:50

标签: r

我想问一下如何计算特定行和列的平均值?例如,我的数据框是这样的:

df:
precip  tmax    tmin  wind    date   year  month day
  1.75  18.38   6.29  2.06 1952-05-26 1952     5  26
  2.12  14.45   1.97  3.50 1952-05-27 1952     5  27
  0.00  18.98   1.95  2.82 1952-05-28 1952     5  28
  0.00  24.22   5.19  4.12 1952-05-29 1952     5  29
  2.00  21.66   6.41  1.90 1952-05-30 1952     5  30
 35.38  18.79   5.34  3.13 1952-05-31 1952     5  31
  0.62  22.64   6.79  3.50 1952-06-01 1952     6   1
  2.30  24.58   9.98  2.07 1952-06-02 1952     6   2

(1)如何计算特定月份的平均tmax,例如5月?数据集是从1950年到2000年。 我用了代码:

df_jul = apply(df[,'month'==5],2,mean,na.rm=T)

但结果是:numeric(0)

如果我以其他方式做:

df_jul.entry = which(df[,7]==5)
df.tmax = apply(df[c(df_jul.entry),2],2,mean,na.rm=T)

它会抛出一个错误:dim(X)必须有一个正长度 我无法查看问题。

(2)如何计算年降水量?也就是说,每年增加降水量。 谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

对于第一个问题,

mean(df[df$month==5,'tmax'])

并且第二次

 aggregate(precip~year, df, mean)

 library(data.table)
 setDT(df)[, list(precip= mean(precip)), by=year]

 library(dplyr)
 df %>%
   group_by(year) %>%
   summarise(precip=mean(precip))

关于您的代码

df[, 'month']
#[1] 5 5 5 5 5 5 6 6

但是,

 df[, 'month'==5]
 #data frame with 0 columns and 8 rows

可以是

 df[, 'month']==5
 #[1]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE   

可以使用行索引

 df[df[, 'month']==5,]

并指定列tmax,我们将该列的元素作为向量。

  df[df[, 'month']==5,'tmax']
 #[1] 18.38 14.45 18.98 24.22 21.66 18.79

 mean(df[df[, 'month']==5,'tmax'])
 #[1] 19.41333

默认情况下,当我们使用[时,默认值为drop=TRUE,因此如果只有一列,则会将维度删除为矢量。然后apply无法使用,因此您可以更改drop=FALSE并使用apply。但是,不需要对单个列使用apply

  apply(df[df[, 'month']==5,'tmax',drop=FALSE], 2, mean)
  #   tmax 
  #19.41333 

第二个代码

是同样的问题
df_jul.entry <- which(df[,7]==5)
df[c(df_jul.entry),2]#become a vector
#[1] 18.38 14.45 18.98 24.22 21.66 18.79

可以通过drop=FALSE

来避免

答案 1 :(得分:0)

或者使用plyr,您可以为任何一组计算所需的值,例如:

require(plyr)
df <- ddply(df, 'month', transform, MeanTmax = mean(tmax))

然后,您可以方便地参考这个新列并对每个月的数据进行子集等等。