2016-12-27 8 views
0

この作業は難しいです。私は月の30/31日の1時間ごと(最小記録時間)の一時的な値を見つける必要があります。しかし、センサーは不規則な周期で温度値を測定する(入力ファイルが画像として添付される)。私はこのためにRコードを書いています。例えば、出力:日付と最小時間でソートR

1/6/2016 0.00 90.45 
1/6/2016 1.01 92.54 
1/6/2016 2.12 94.95 

1/6/2016 21.53 95.85 

同様のサンプル・データ・フレーム:<

サンプル - data.frame( 日付= Cの(担当者( "2016年6月1日"、 NA、rep( "2016-06-01"、3)、NA、NA、rep( "2016-06-01"、3)、NA、rep ))、 時間= c(「0:00」、「0:10」、「0:20」、「0:30」、「1:01」、「1:11」、「1:21」、 「1:31」、「1:41」、「1:51」、「2:12」、「2:42」、「2:52」、NA、NA、「12:03」、「12:13」 "、" 12:23 "、NA、NA 「21:53」、「21:53」、「21:54」、「23:14」、NA、NA、NA)、 temp = c(90.45,92.29,90.88,92.22,92.54,92.57,93.18,93.9,94.51,94.37 、95.96、95.32、95.2、NA、NA、95.37、95.52、95.35、NA、NA、95.85、95.6、96.14、NA、NA、NA) )

誰もがして行う方法の助けてください場合akrunの提案に

+2

時間を1時間ごとに切り捨てるのに 'cut.POSIXct'を使うことができます。それをグルーピング変数として使用して最小値を見つけます。 – akrun

+0

ようこそStackOverflow! [良い質問をする方法](http://stackoverflow.com/help/how-to-ask)と[再現可能な例を与える方法](http://stackoverflow.com/questions/)の情報をお読みください。 5963269)。これは他の人があなたを助けることをはるかに容易にします。感謝@akrun – Axeman

+0

。あなたはそれを詳しく教えてもらえますか? –

答えて

1

ビルをプログラミングRは、ここcut.POSIXctとdplyrを使用して潜在的な実装です:

library(dplyr) 
output <- 
    sample %>% # Using reproducible dataset above 
    # Filter to only observed records 
    filter(!is.na(date) & !is.na(time)) %>% 
    mutate(
    # Create a date_time using the date and time variables 
    date_time = as.POSIXct(paste(date, time), 
       format="%Y-%m-%d %H:%M"), 
    # Create hour intervals to be used as grouping variable 
     hour = cut.POSIXt(date_time, breaks = "hour")) %>% 
    # Group by hour 
    group_by(hour) %>% 
    # Select only records where the date and time are the minimum 
    # date and time in the group 
    filter(date_time == min(date_time)) 

私は、コードを注釈付き - mまでの方法が間違いなくありますコードをより簡潔にしたり、空のレコードのようなエッジケースを処理したりすることができますが、1時間あたりの最小日時を正しく選択する必要があります。

+0

Thanks Adam。しかし私はRプログラミングの初心者です。完全な結果を得ることができるように、完全にコードを詳しく教えてください。入力ファイルのパスの後にコードを記述する必要がありますか?どのようにセンサーの値で出力を保存する...親切に私に返信してください。 –

+0

問題ありません。サンプルデータ以外のデータをどのように読み込んでいるのかを仮定すると、コードを実行してファイルを読み込んだ後、3行目に書き換えたコード( 'sample%>%')を実行する必要があります。 'となるデータ%>%') –

+0

ライブラリ(dplyr) データ< - read.csv( "のtest.CSV"、stringsAsFactors = FALSE) 出力< - データ%>!% フィルタ(is.na(日) &lt; is.na(時間))%>% mutate( date_time = as.POSIXct(ペースト(日付、時刻)、 形式= "%Y-%m-%d%H%M")、 時間:= cut.POSIXt(date_time、breaks = "hour"))%>% group_by(時間)%>% フィルタ(date_time == min(date_time)) –

関連する問題