2017-05-08 11 views
0

私は、各サブジェクトにいくつかの変数と各変数が測定された日付を持つデータを扱っています。変数は、各対象について複数回測定される。複数の変数のもっとも近い日付のデータセットをフィルタリングする

私は、それぞれの主題に対して「目標日」という別々のファイルを持っています。私は、元のデータセットをフィルタリングし、各サブジェクトの目標日付に最も近い可変の測定値のみを含める必要があります。

は、ここで簡単な例です:各被験者に対して

library(dplyr) 

set.seed(1234) 

data <- data.frame(dates = sample(seq(as.Date('1999/01/01'), 
as.Date('2010/01/01'), by="day"), 200), 
        ids = rep(1:50, 2)) 
data <- arrange(data, ids) 
data$vars <- rep(1:2, 100) 

target.date <- data.frame(dates = sample(seq(as.Date('1999/01/01'), 
as.Date('2010/01/01'), by="day"), 50), 
          ids = rep(1:50)) 

、それぞれが2回測定二つの変数があります。日付に最も近い各変数の測定値のみをtarget.dateに含めるとします。

私はこのようなdplyr使用してみました:

data.sub <- data %>% 
    group_by(id, vars) %>% 

が、私は何とかidsのそれぞれに関連するtarget.dateに日付を参照する必要があるので、私は、続行するかどうかはわかりません。また、目標の日付を過ぎずに最も近い日付を選択したいと思いますが、私が作成したこの例では、いくつかの科目では不可能かもしれません。ここで

は私が取得しようとしている出力の抜粋です:件名2について

 dates ids vars 
1 2000-04-01 1  1 
2 2003-08-26 1  2 
3 2005-01-22 2  1 
4 2002-05-13 2  2 
. 
. 
. 

vars==1のための両方の日付は、目標日後です。しかし、私はそれを簡単にするためにとにかく入れました。しかし、可能であれば、私はそれを越えることなく、目標の日付に最も近い日付を取っていきたいと思います。

答えて

1

ここに私が必要と思うものがあります。あなたの質問から非常にはっきりしておらず、サンプルデータがあれば期待される出力は得られませんでした。私はあなたのフィードバックに基づいて修正することができます。

data <- inner_join(data, target.date, by = 'ids') 
data$days <- difftime(data$dates.x, data$dates.y, units = 'days') 
data$days <- abs(as.integer(data$days)) 
data %>% 
    group_by(ids, vars) %>% 
    filter(days == min(days)) %>% 
    slice(1) 
+0

私はサンプル出力をいくつか追加しましたが、私が探していた答えがありました。ありがとう! –

関連する問題