2017-08-03 1 views
0

テレメトリデータをディール期間にサブセット化しようとしています。テレメトリデータは7ヶ月間にわたり、日単位の日の出データを使用したいと考えています。複数日にわたるディール期間によるサブセット(異なるdfからの複数の列によるサブセット)

のはdf1が私のテレメトリデータであり、df2は私の日の出のデータであるとしましょう:

df1 <- data.frame(
    datetime = as.POSIXct(c("2016-05-01 04:30", "2016-05-01 07:00", "2016-05-01 13:50", 
        "2016-05-03 03:50", "2016-05-04 18:20", "2016-05-06-04:20")), 
    ID = c("A1", "B3", "A2", "A2", "B1", "B2") 
) 


df2 <- data.frame(
    date = as.POSIXct(c("2016-05-01", "2016-05-02", "2016-05-03", "2016-05-04", "2016-05-05", "2016-05-06")), 
    ntwilight.start = c("03:25:00", "03:23:00", "03:21:00", "03:19:00", "03:17:00", "03:15:00"), 
    sunrise = c("04:45:00", "04:44:00", "04:42:00", "04:40:00", "04:39:00", "04:37:00") 
) 
df2$ntwilight.start <- as.POSIXct(paste(df2$date, df2$ntwilight.start, sep = " "), format = "%Y-%m-%d %H:%M") 
df2$sunrise <- as.POSIXct(paste(df2$date, df2$sunrise, sep = " "), format = "%Y-%m-%d %H:%M") 

夜明けのためのサブセットを作成するために、私はdatetimentwilight.startsunriseの間に入るdf1からすべての行を選択する必要がありますdf2から。

dawn2 <- df1[df1$datetime >= df2$ntwilight.start & df1$datetime < df2$sunset,] 
:私は時間の単一ペアはただし、次のコードは、適切なマッチを提供するために失敗した

dawn <- df1[df1$datetime >= as.POSIXct("2016-05-01 03:25", format = "%Y-%m-%d %H:%M") & df1$datetime < as.POSIXct("2016-05-01 04:45", format = "%Y-%m-%d %H:%M")] 

値使用df1をサブセットにできる午前

   datetime ID 
1 2016-05-01 04:30:00 A1 
2 2016-05-03 03:50:00 A2 
3 2016-05-06 04:20:00 B2 

:サブセットは、その後のようになります。

日付が一致する行にはR検索df2をどうやって行くのですか?そのサブセットを決定するためにdf2のpropriate行?

日付と時刻を別々の列(両方のデータフレーム)に分ける必要があり、おそらくdf1を日付別にグループ化し、各グループを別々にサブセット化する必要があるように感じます。

答えて

0

私は日によってあなたのデータフレームに参加するには、いくつかのdplyr魔法を使用して、私はありがとう

df1 <- data.frame(
datetime = as.POSIXct(c("2016-05-01 04:30", "2016-05-01 07:00", "2016-05-01 13:50", 
         "2016-05-03 03:50", "2016-05-04 18:20", "2016-05-06 04:20"), 
         , format = "%Y-%m-%d %H:%M"), 
ID = c("A1", "B3", "A2", "A2", "B1", "B2") 
) 

df1$date <- as.POSIXct(as.character(df1$datetime), format = "%Y-%m-%d") #there is probably a better way to isolate date, but this works... 


df2 <- data.frame(
date = as.POSIXct(c("2016-05-01", "2016-05-02", "2016-05-03", "2016-05-04", "2016-05-05", "2016-05-06")), 
ntwilight.start = c("03:25:00", "03:23:00", "03:21:00", "03:19:00", "03:17:00", "03:15:00"), 
sunrise = c("04:45:00", "04:44:00", "04:42:00", "04:40:00", "04:39:00", "04:37:00") 
) 

df2$ntwilight.start <- as.POSIXct(paste(df2$date, df2$ntwilight.start, sep = " "), format = "%Y-%m-%d %H:%M") 
df2$sunrise <- as.POSIXct(paste(df2$date, df2$sunrise, sep = " "), format = "%Y-%m-%d %H:%M") 



library(dplyr) 
dawn2 <- df1 %>% 
    left_join(df2,by = "date") %>%       # join the 2 data frames by date 
    filter(datetime >= ntwilight.start, datetime < sunrise) # filter datetime before twilight and after sunrise 
+0

による結果のデータフレームをフィルタリング!これは完璧です。 –

関連する問題