2016-05-05 5 views
0

私は、15分ごとの値のレコードを持つデータフレームを持っています。ベースRループをR data.tableに変換する

私は15分の範囲でレコードの数を計算するためにループを使用しています。 しかし、非常に遅いです。私はそれをdata.tableの機能に変換すると、処理がかなりスピードアップすると思います。

Input$Freq <- array() 

for(i in 1:nrow(Input)) 
{ 
    Input[i,"Freq"]<-0 
} 

for(i in 1:nrow(Input)) 
{ 
    for(j in 1:nrow(Input)) 
    { 
    if(Input[i,"Cur_DateTime"] > Input[j,"Cur_DateTime"] & Input[i,"Cur_DateTime"] < Input[j,"Window_15"]) 
     Input[i,"Freq"] <- Input[i,"Freq"]+1 
    } 
} 
+3

をあなたが持っているサンプルデータを投稿することができますか?それは作業コードの答えを提供するのに役立ちます。 – Gopala

+2

あなたは明らかに最初のループと最初の '配列 '割り当てをすぐに取り除くことができます。これらを以下のように置き換えてください: 'Input [、" Freq "] < - 0'。 – lmo

答えて

1

これはまさにあなたの質問に答える場合、私はわからない:

私は、次のループを書かれています。ベースRのカットコマンドを使用してデータを直接ビンすることができます。ここで は一例です:

#create a dummy sequence 
s<-seq(from =as.POSIXct("2015-02-15 09:46:43.17"), by="5 min", length.out = 50) 
df<-data.frame(s) 

#bin the sequence by 15 minute intervals: 
df$bins<-cut(df$s, "15 min") 

は要約するdplyrライブラリを使用します。

library(dplyr) 
summarise(group_by(df,bins), n()) 

やフランクなどが提案:

count(df, bins) 
+2

Dplyrには、要約のコードを簡略化するために 'count'と' tally'があります – Frank