2015-04-25 74 views
1

我想問一下如何計算特定行和列的平均值?例如,我的數據幀是這樣的:關於計算行中的行和列

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爲特定的月份,如在五月?該數據集是自1950年到2000年 我使用的代碼:

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

但結果是:數字(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)如何計算年降水量?也就是說,每年增加沉澱值。 感謝您的幫助。

回答

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

+0

謝謝。它現在有效。爲什麼我嘗試了兩種長時間的方法,但都沒有奏效? –

+0

@Lily添加了一些解釋,爲什麼你的代碼不工作 – akrun

0

或者與使用的plyr就可以計算出對於任何一個基團所需的值來避免,例如:

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

然後你可以方便地參考這個新的列和每個月的數據子集等。