1

Rユーザー、私はこのデータフレームを持っています:

head(M2006)
        X.ID_punto   MM.GG.AA  Rad_SWD 
2945377          1 0001-01-06  19.918  
2945378          2 0001-01-06  19.911   
2945379          1 0001-02-06  19.903  
2945380          2 0001-02-06  19.893   
2945381          1 0001-03-06  19.875 
2945382          2 0001-03-06  19.858  

私がする必要があるのは、日付ごとに異なるサブセットを取得することです (MM.GG.AA):

subset(M2006, M2006$MM.GG.AA=="0001-10-06" )

つまり、サイトごとに異なるサブセット (X.ID_punto):

subset(M2006, M2006$X.ID_punto==1)

サイト (X.ID_punto) または日付 (MM.GG.AA) でこれをループすることは可能ですか? 私はこの方法で試しました:

 output<- data.frame(ID=rep(1:365))
 for  (p in as.factor(M2006[,1]))  { 
             sub<-  subset(M2006, M2006$X.ID_punto==p )
             output[,p] <- sub$Rad_SWD
      }

コードは実行されますが、すべての ID でループすることはありません。ループできない場合は、subset(M2006, M2006$X.ID_punto==xxx) を何千回も書き留める必要があります... よろしくお願いします! フラ

4

2 に答える 2

1

reshape入力と目的の出力の説明から、パッケージとcast関数を使用してこれをかなり簡単に達成できると思います:

require(reshape)
cast( M2006 , MM.GG.AA ~ X.ID_punto , value = .(Rad_SWD) )
#   MM.GG.AA      1      2
#1 0001-01-06 19.918 19.911
#2 0001-02-06 19.903 19.893
#3 0001-03-06 19.875 19.858

ループを使用するよりも確実に高速になります(絶対的な最速のソリューションにはなりませんが、1〜2秒未満だと思います)。

于 2013-05-03T12:47:36.770 に答える
0

私は自分で可能な解決策を見つけました。質問をキャンセルするつもりはありません。誰かが役に立つと思うかもしれません。

   #first of all, since I have 1008 sites (X.ID_punto)
    #I created a list of my sites       
    list<- rep(1:1008)

    #then, create a dataframe where I'll store my subsets. 
    #Every subset will be a column of 365 observations
    output<- data.frame(site1=rep(1:365))

    #loop the subset function on list of 1008 sites
    for  (p in 1:length(list))  { 
      print(p)  #just to see if loop run
      sub<-  subset(M2006, M2006$X.ID_punto==p )
      output[,p] <- sub$Rad_SWD #add the subset, as a column, to output dataframe 
    }
    write.csv(uscita, "output.csv")#save the resulted data frame
于 2013-05-03T10:13:57.050 に答える