2017-11-30 11 views
0

私は2つのデータシートを持っています.1つは30分間隔で鳥の動きデータを含み、もう1つは鳥が入れ子になっていた日付範囲を含みます。私はネスト範囲内の動きデータを見ることに興味があります(短い日付のみを使用)。私はこのような出力を探しています動物IDで別のシートの日付範囲内の日付のみを選択する

Data frame 1: 
Bird_ID  Date   
A   4/5/2015 
A   4/20/2015 
A   4/28/2015 
B   5/6/2016 
B   5/30/2016 
C   3/4/2014 
C   3/9/2014 

Data frame 2: 
Bird_ID  Nest_start  Nest_end 
A   4/2/2015  4/15/2015 
B   5/21/2016  6/3/2016 
C   4/1/2014  4/15/2014 

Data frame 1.1: 
Bird_ID  Date  Keep (0=no, 1=yes)? 
A   4/5/2015 1 
A   4/20/2015 0 
A   4/28/2015 0 
B   5/6/2016 0 
B   5/30/2016 1 
C   3/4/2014 0 
C   3/9/2014 0 

列の長さが異なる。ここデータの簡単な例です(私は行IRLの数千人を持っています)。私は他の投稿からのメソッドに続くエラーに遭遇しました(しかし、これはとにかく繰り返しです!)。前もって感謝します!

答えて

1

まずデータを作成します。テーブルをインポートするときは、またはread.csvに引数stringAsFactors=Fを追加することが非常に重要です。これは、Rがあなたの日付を要因として扱わないことを保証します。

df1 <- data.frame(Bird_ID = c(rep("A", 3), rep(c("B", "C"), each = 2)), 
        Date = c("4/5/2015", "4/20/2015", "4/28/2015", 
          "5/6/2016", "5/30/2016", "3/4/2014", "3/9/2014"), 
        stringsAsFactors = F) 
df2 <- data.frame(Bird_ID = c("A", "B", "C"), 
        Nest_start = c("4/2/2015", "5/21/2016", "4/1/2014"), 
        Nest_end = c("4/15/2015", "6/3/2016", "4/15/2014"), 
        stringsAsFactors = F) 

あなたの2つのテーブルの鳥のために同じ列名を持っているので、追加の引数が必要とされない、1で2つのテーブルを結合するためにdplyrパッケージからleft_joinを使用してあなたの日付日付オブジェクト

df1$Date <- as.Date(df1$Date, format = "%m/%d/%Y") 
df2$Nest_start <- as.Date(df2$Nest_start, format = "%m/%d/%Y") 
df2$Nest_end <- as.Date(df2$Nest_end, format = "%m/%d/%Y") 

を作ります。

library(dplyr) 
df <- df1 %>% 
    left_join(df2) 

日付が日付オブジェクトとして正しく宣言されると、Rは論理演算子を使用できるようになり、保持列を作成できます。ここでは、列をTRUE/FALSEにしますが、as.numeric(df$Keep)によって数値(1/0)に変換できます。

df$Keep <- df$Date <= df$Nest_end & df$Date >= df$Nest_start 
df 
関連する問題