2014-09-04 47 views
0

我是新來的堆棧溢出,也是R編程,所以請原諒,如果這個問題有點愚蠢的聲音。在R代碼中顯示多個夏季

我想問問知道的任何人是否可以從一個代碼命令顯示多個摘要。

只給什麼,我想實現這樣一個例子:數據幀由過了數年,每天的氣候數據(包括約6各種變量)

sub <- subset(data, Month == "Sep" & Day==2, !is.na(data), select = MSLP:Temp) 
summary(sub,mean) 

     MSLP  Direction   Speed    Temp  
Min. : 976 Min. : 8.4 Min. : 1.680 Min. : 8.18 
1st Qu.:1007 1st Qu.:167.8 1st Qu.: 6.095 1st Qu.:13.04 
Median :1016 Median :229.7 Median :10.010 Median :14.73 
Mean :1014 Mean :213.0 Mean :10.042 Mean :14.68 
3rd Qu.:1022 3rd Qu.:270.4 3rd Qu.:13.320 3rd Qu.:16.40 
Max. :1034 Max. :353.6 Max. :25.640 Max. :21.58 

所有好爲止。但是我想問的是,如果有人知道,是否可以在上面的代碼中包含某些內容來顯示某個時間段內每天的摘要?從第2天開始到第10天。

如果還行,是否可以在上面的代碼中包含另一個critera以包含特定年份? IE:

sub <- subset(data, Month == "Sep" & Day==2 - include year etc. 

因爲我根本找不到它。對於例如,如果我這樣做

sub <- subset(data, Month == "Sep" & Day==2 & Year == 1967 #etc ...) 

我剛剛得到一個錯誤代碼:

Error in eval(expr, envir, enclos) 
再次

道歉,如果這些問題似乎有點愚蠢,但如果任何人有上述的任何解決方案,我會非常感謝。

+0

請包括樣本輸入數據,並清楚你想要的輸出是什麼。提問時,您應該總是嘗試包括[可重現的示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。但是這聽起來像「聚合」功能可能是更好的選擇。或者pe – MrFlick 2014-09-04 03:00:44

回答

0

你當然可以!如果您將結果打印到帶有summary函數的控制檯,我假設您不需要太多天(< 100)左右的摘要。在這種情況下,一個簡單的循環,可能是你所需要的。

繼承人與mtcars數據集的例子(帶有R) 數據(mtcars) 摘要(mtcars)

for(i in unique(mtcars$cyl)) { 
    print(paste("summary for dataset when cyl ==", i)) 
    print(summary(mtcars[mtcars$cyl==i,])) 
} 

在你的情況,我認爲你可以用它來打印天2摘要-10:

for(i in 2:10) { 
    print(paste("summary for day ==", i)) 
    sub <- subset(data, Month == "Sep" & Day==i, !is.na(data), select = MSLP:Temp) 
    print(summary(sub) 
} 

您可以在子集函數中明確包含第三個條件,如Year==1967。也許Year沒有定義?通常在未定義對象時出現Error in eval(expr, envir, enclos)。請嘗試class(data$Year)以確保data$Year是數字或整數類型。

+0

ajb,非常感謝您的回覆和有益回覆!我測試了mtcars的例子,並嘗試一種享受!就像你非常友好地把我自己的數據集的函數放在一起一樣!但只有一個問題,這無疑是我錯誤的做法,所有結果列表中的結果都是「不適用」或「不適用」。我試圖弄亂'na.rm = TRUE'命令,但無論我把它放在函數中的哪個位置,它都不起作用。 EG: sub < - subset(data,Month ==「Sep」&Date == i,na.rm = T,select = 對不起,如果您能夠成爲一個痛苦,但如果你可以請善意建議。 xtra tips – 2014-09-04 04:24:49

+0

當你運行'str(data)'時,你能拷貝R吐出的輸出嗎? – ajb 2014-09-04 05:02:44

+0

進一步檢查......如果你只想選擇名爲「MSLP」和「Temp」的列,你想要: (數據,Month ==「Sep」&Day == 2,select = c(「MSLP」,「Temp」))' 如果您想從此數據框中刪除NAs,請參閱此[post。]( http://stackoverflow.com/questions/20342435/efficient-method-to-subset-drop-rows-with-na-values-in-r) 可能有一個更清潔的方式,但2個步驟將工作: (數據,月==「Sep」&Day == 2,select = c(「MSLP」,「Temp」))' 'df2 < - [rowSums(is.na(df1) )== 0,]' – ajb 2014-09-04 05:16:51

0

我最終通過微調ajb的非常有用的功能來最終實現了它的功能(減去NAs/NANS)。

下面的函數顯示在每個31天所選變量個別概要在八月:

for(i in 1:31) { 
print(paste("summary for date ==", i)) 
x <- subset(df, Month == 8 & Date==i, select = V1:V4) 
print(summary(x,is.na=T[x$Date==i,])) 
} 

仍然產生錯誤消息,以便明顯需要將其tweeked以上,但主要的是,結果仍然產生。

編輯,發現問題。儘管產生了期望的結果,放在'x'函數中的無用'is.na'函數產生了錯誤信息。以上功能已被編輯併產生更清晰的結果。