我想问一下如何计算特定行和列的平均值?例如,我的数据框是这样的:
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)如何计算年降水量?也就是说,每年增加降水量。 谢谢你的帮助。
答案 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))
然后,您可以方便地参考这个新列并对每个月的数据进行子集等等。