2017-11-18 13 views
1

ID変数と2つの日付変数(dat1とdat2)を持つデータフレーム(df1)があります。dplyr()を使用して2つの日付の差に基づいて観測値をサブセット化する方法

データフレームをサブセット化して、dat2とdat1の差が30日以下である観測値を取得したいとします。

私はdplyr()を使用しようとしていますが、動作させることはできません。

ご協力いただければ幸いです。

開始点(DF):

df1 <- data.frame(ID=c("a","b","c","d","e","f"),dat1=c("01/05/2017","01/05/2017","01/05/2017","01/05/2017","01/05/2017","01/05/2017"),dat2=c("14/05/2017","05/06/2017","23/05/2017","15/10/2017","15/11/2017","15/12/2017"), stringsAsFactors = FALSE) 

望ましい結果(DF):

dfgoal <- data.frame(ID=c("a","c"),dat1=c("01/05/2017","01/05/2017"),dat2=c("14/05/2017","23/05/2017"),newvar=c(13,22)) 

現在のコード:我々がやって前Dateクラスに変換する必要があり

library(dplyr) 
df2 <- df1 %>% mutate(newvar = as.Date(dat2) - as.Date(dat1)) %>% 
     filter(newvar <= 30) 

答えて

1

減算

library(dplyr) 
library(lubridate) 
df1 %>% 
    mutate_at(2:3, dmy) %>% 
    mutate(newvar = as.numeric(dat2- dat1)) %>% 
    filter(newvar <=30) 

as.Dateにもformat引数を含める必要があります。そうでない場合は、フォーマットが受け入れられた%Y-%m-%dであると考えられます。ここには、%d/%m/%Y

df1 %>% 
    mutate(newvar = as.numeric(as.Date(dat2, "%d/%m/%Y") - as.Date(dat1, "%d/%m/%Y"))) %>% 
    filter(newvar <= 30) 
# ID  dat1  dat2 newvar 
#1 a 01/05/2017 14/05/2017  13 
#2 c 01/05/2017 23/05/2017  22 
関連する問題