2017-11-24 16 views
0

特定の時間間隔(各観測の60秒前と60秒後など)で最小値を探しているコードを書きました。これで、時間間隔をさらに60秒増加させるループを作成する必要があります。新しい反復の結果(最小値)を新しい列としてデータフレームに追加する必要があります。ループをi = 5とすると、5つの新しい列を作成する必要があります。R - ループを使用してDFに列を追加する

どのようにすべての繰り返しの結果でいっぱいにこれらの新しい列を追加することはできません。

私はあなたの助けに感謝します。私はCBINDがどこかにループ内でなければならないこととし

df <- data.frame(timestamp = ymd_hms("2017-11-24 08:00:00", "2017-11-24 08:01:00", "2017-11-24 08:02:00", "2017-11-24 08:03:00", "2017-11-24 08:04:00", "2017-11-24 08:05:00", "2017-11-24 08:06:00", "2017-11-24 08:07:00", "2017-11-24 08:08:00", "2017-11-24 08:09:00", "2017-11-24 08:10:00"), temp=c(99.1, 98.2, 97.0, 96.5, 98.0, 97.6, 99.4, 98.2, 96.4, 99.2, 98.5))

ライブラリ(purrr)

ライブラリ(dplyr)

timeinterval <- 60 

for (i in 1:5) { 
timeinterval <- timeinterval+60 

mdf <- map(1:nrow(df), ~df[df$timestamp >= df[.x,]$timestamp-timeinterval & df$timestamp <= df[.x,]$timestamp+timeinterval,]) 
statdf <- map_df(mdf, ~.x %>% 
          summarise(timestamp_to = tail(timestamp,1), 
       timestamp_from = head(timestamp,1), 
            min.temp = min(temp), 
       records = n())) 
} 
new<-cbind(df, statdf$min.temp)` 

..:

は、ここに私の典型的なコードです

+0

私は問題を解決しません。あなたのデータフレームには11のサンプルがあります。各間隔で最小値を持つ新しい列を作成する場合、各列の値の11倍を繰り返しますか? –

+0

この関数は、サンプルセット内の "ローリング"最小値を探しています(各サンプルの60秒前と60秒後、この場合は3つの観測値があり、最小値が選択されています)秒(したがって、次の結果は5回の観測値の最小値です)。目標は新しい反復の結果を新しい列に追加することです。そのため、最終的なDFには、増加する間隔で得られたすべての結果が含まれます。 –

答えて

0

これを試すことができます:

df <- data.frame(timestamp = ymd_hms("2017-11-24 08:00:00", "2017-11-24 08:01:00", "2017-11-24 08:02:00", "2017-11-24 08:03:00", "2017-11-24 08:04:00", "2017-11-24 08:05:00", "2017-11-24 08:06:00", "2017-11-24 08:07:00", "2017-11-24 08:08:00", "2017-11-24 08:09:00", "2017-11-24 08:10:00"), 
       temp=c(99.1, 98.2, 97.0, 96.5, 98.0, 97.6, 99.4, 98.2, 96.4, 99.2, 98.5)) 
timeinterval <- 60 
n<-5 #number of intervals 

f<-function(i){ 
    timeinterval2 <- timeinterval*i 

    mdf <- map(1:nrow(df), ~df[df$timestamp >= df[.x,]$timestamp-timeinterval2 & df$timestamp <= df[.x,]$timestamp+timeinterval2,]) 
    statdf <- map_df(mdf, ~.x %>% 
        summarise(timestamp_to = tail(timestamp,1), 
           timestamp_from = head(timestamp,1), 
           min.temp = min(temp), 
           records = n())) 
    return(statdf$min.temp) 
} 
aux<-sapply(1:n,f) 
colnames(aux)<-paste("timeinterval",seq(1,n),sep="_") 
cbind(df,aux) 
+0

私はそれが私の問題を解決すると思う、ありがとう! –

関連する問題