2017-11-24 6 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

나는 문제를 undestand. 데이터 프레임에 11 개의 샘플이 있습니다. 각 간격마다 최소값을 사용하여 새 열을 만드는 경우 각 열에 대해 해당 값의 11 배를 반복 할 것입니까? –

+0

이 함수는 샘플 집합에서 "롤링"최소값을 찾고 있습니다 (예 : 각 샘플의 60 초 후와 60 초 후,이 경우 3 회의 관측 값이 있고 최소값이 선택됨). 루프는 간격을 60 씩 증가시킵니다 초 (다음 결과는 최소 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

내 문제를 해결한다고 생각합니다. 정말 고마워요! –

관련 문제