2012-04-24 47 views
1

我是新的使用R和我有一個問題,我試圖找到答案。我有安排如下(有行十萬,但我只是顯示簡單的樣本)的文件:計數-99.9在r

YEAR Month day S1  T1  T2   R1 
1965 3  2 11.7 20.6 11.1 18.8 
1965 3  3 14.0 16.7  3.3  0.0 
1965 3  4 -99.9 -99.9 -99.9 -99.9 
1965 3  5  9.2  5.6  0.0 -99.9 
1965 3  6 10.1  6.7  0.0 -99.9 
1965 3  7  9.7  7.2  1.1  0.0 

我想知道對於每一列(T1,T2和R1)在哪一年,月和日-99.9位於;例如從1980/1/3到1980/1/27,T1有X -99.9,1990/2/10到1990/3/30有T1到Y-99.9等等。 T2和R相同。 在R中如何做到這一點?

這只是一個像這樣的文件,但我有幾乎2000個文件具有相同的問題(我知道我需要循環它),但如果我知道如何做一個文件,那麼我只會創建一個循環。

我真的很感激任何幫助。非常感謝您提前閱讀和幫助!

回答

0

我把重命名你最後的數據框欄「R1」

lapply(c('T1', 'T2', 'R1'), function(x) { dfrm[ dfrm[[x]]==-99.9 , # rows to select 
               1:3 ] }# columns to return 
     ) 
#-------------  
[[1]] 
    YEAR Month day 
3 1965  3 4 

[[2]] 
    YEAR Month day 
3 1965  3 4 

[[3]] 
    YEAR Month day 
3 1965  3 4 
4 1965  3 5 
5 1965  3 6 

的自由目前還不清楚是否想要的值或計數(我不認爲你既可以在相同的報告)如果你想命名的條目:

> misdates <- .Last.value 
> names(misdates) <- c('T1', 'T2', 'R1') 

如果你想要一個計數:

lapply(misdates, NROW) 
$T1 
[1] 1 

$T2 
[1] 1 

$R1 
[1] 3 

(您可能想了解如何使用NA值。使用數字作爲缺失值是不推薦的數據管理。)

+1

再最後的評論,使用'na.strings =「 - 99.9」在數據讀取時可能是有用的...... – 2012-04-24 22:01:36

+0

我同意關於NA,其實我已經做到了。我想問你關於錯誤< - .Last.value「值」將是我的-99.9(或NA)? 再次感謝您的幫助! – david 2012-04-25 13:25:08

+0

'.Last.value'將是'lapply(。)'創建的整個列表......假設您在此期間還沒有完成另一個任務。有時'.Last.value'是一個非常大的數據框。這是一種安全網,當您忘記將某個對象分配給某個名稱時, – 2012-04-25 13:48:53

0

如果我理解正確的話,你想獲得多少「-99.9」是你每月,通過柱獲得,

這是一個使用我的S1碼plyr。你會注意到我擴展了你的例子來獲得一個月的數據。

library(plyr) 

my.table <-read.table(text="YEAR Month day S1 T1 T2 R1 
1965 3 2 11.7 20.6 11.1 18.8 
1965 3 3 14.0 16.7 3.3 0.0 
1965 3 4 -99.9 -99.9 -99.9 -99.9 
1965 3 5 9.2 5.6 0.0 -99.9 
1965 3 6 10.1 6.7 0.0 -99.9 
1965 3 7 9.7 7.2 1.1 0.0 
1966 1 7 -99.9 7.2 1.1 0.0 
1966 1 8 -99.9 7.2 1.1 0.0 
", header=TRUE, as.is=TRUE,sep = " ") 

#Create a year/month column to summarise per month 
my.table$yearmonth <-paste(my.table$YEAR,"/",my.table$Month,sep="") 

S1 <-count(my.table[my.table$S1==-99.9,],"yearmonth") 
S1 
    yearmonth freq 
1 1965/3 1 
2 1966/1 2 
+0

非常感謝!我也把這一天,所以我有一年的一個月。這非常有用,再次感謝你!我很高興我使用這個博客。 – david 2012-04-25 13:23:49