2016-09-20 10 views
0

私はRstudio(バージョン.99.903)を使用しており、PC(ウィンドウズ8)を持っています。私には本当に難しい質問があります。データは次のようになります。Rの現在の値と直近の値を比較してもデータがありません

 Number  Trial  ID Open date Enrollment 
    420  NCT00091442 9 1/28/2005 0.2 
    1476  NCT00301457 26 2/22/2008 1 
    10559  NCT01307397 34 7/28/2011 0.6 
    6794  NCT00948675 53 5/12/2010 0 
    6451  NCT00917384 53 8/17/2010 0.3 
    8754  NCT01168973 53 1/19/2011 0.2 
    8578  NCT01140347 53 12/30/2011 2.4 
    11655  NCT01358877 53 4/2/2012 0.3 
    428  NCT00091442 55 9/7/2005 0.1 
    112  NCT00065325 62 10/15/2003 0.2 
    477  NCT00091442 62 11/11/2005 0.1 
    16277  NCT01843374 62 12/16/2013 0.2 
    17386  NCT01905657 62 1/8/2014 0.6 
    411  NCT00091442 66 1/12/2005 0 

私がしなければならないことは、ID内の各日付の登録とそれ以前の登録の比較です。それ以前にID内に日付がない場合、比較は行われません。例えば、ID26の場合、比較は行われません。同様に、ID 53の場合、2010年5月12日の比較はありませんが、2010年8月17日から2010年5月12日まで、次に2010年1月19日から2010年8月17日までを比較したいと思います2010年5月12日まではそうではない)。出力は、理想的には、前の値(前はy軸、前のx軸の電流)に対する電流の値をプロットするドットプロットです。最後に、直前の値から現在の値を減算する列を生成する必要があります。

> 20,000データポイントがあります。私は以前のものを振り返るスクリプトを書こうとしましたが、私はIDを制御することができませんでした。また、1年、2年、5年などを振り返ってみると、あまり変わらないと思いますか?

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

+0

私はあなたが(前のyになり、出力は理想的に前の値に対する現在の値をプロットドットプロットだろう '言って何を意味するかを理解することはできませんx軸上の電流)、 '。現在および過去の価値は何ですか?あなたが意味することを明確にすることはできますか? – jazzurro

+0

混乱して申し訳ありません。上記の例のように、現在は2010年8月17日になり、前のものと比較すると2010年5月12日になります。または、2011年1月19日は現在の予定であり、2010年8月17日はそれ以前の予定です。したがって、ドットプロットでは、2010年8月17日の登録値(y軸の前の値)が1/19/2011の登録値(x軸の現在の値)に対して配置されます。 – SMB

+0

これは、2010年8月17日と2010年5月12日の場合、y軸に0、x軸に97があることを意味しますか? – jazzurro

答えて

1

データ処理に関しては、2つの日付間の日数を取得することが望ましいと思います。あなたはいくつかの方法でこれを達成することができます。ここでは、data.tableパッケージにshift()を使用することにしました。​​を指定し、関数とハンドル減算で指定します。 by = IDを指定して、各IDに対してこの操作を実行します。私はあなたの心の中にどんな種類の陰謀があるかを視覚化することはできません。私はあなたの質問にあなたが意味していたことを明確にすることができれば、あなたをサポートしてくれることを嬉しく思います

library(tidyverse) 
library(data.table) 

setDT(mydf)[, Opendate := as.IDate(Opendate, format = "%m/%d/%Y")][, 
    out := as.numeric(Opendate - shift(Opendate, type = "lag")), by = ID][, 
    out := coalesce(out, 0)] 


# Number  Trial ID Opendate Enrollment out 
# 1: 420 NCT00091442 9 2005-01-28  0.2 0 
# 2: 1476 NCT00301457 26 2008-02-22  1.0 0 
# 3: 10559 NCT01307397 34 2011-07-28  0.6 0 
# 4: 6794 NCT00948675 53 2010-05-12  0.0 0 
# 5: 6451 NCT00917384 53 2010-08-17  0.3 97 
# 6: 8754 NCT01168973 53 2011-01-19  0.2 155 
# 7: 8578 NCT01140347 53 2011-12-30  2.4 345 
# 8: 11655 NCT01358877 53 2012-04-02  0.3 94 
# 9: 428 NCT00091442 55 2005-09-07  0.1 0 
#10: 112 NCT00065325 62 2003-10-15  0.2 0 
#11: 477 NCT00091442 62 2005-11-11  0.1 758 
#12: 16277 NCT01843374 62 2013-12-16  0.2 2957 
#13: 17386 NCT01905657 62 2014-01-08  0.6 23 
#14: 411 NCT00091442 66 2005-01-12  0.0 0 

DATA

mydf <- structure(list(Number = c(420L, 1476L, 10559L, 6794L, 6451L, 
8754L, 8578L, 11655L, 428L, 112L, 477L, 16277L, 17386L, 411L), 
Trial = structure(c(2L, 3L, 8L, 5L, 4L, 7L, 6L, 9L, 2L, 1L, 
2L, 10L, 11L, 2L), .Label = c("NCT00065325", "NCT00091442", 
"NCT00301457", "NCT00917384", "NCT00948675", "NCT01140347", 
"NCT01168973", "NCT01307397", "NCT01358877", "NCT01843374", 
"NCT01905657"), class = "factor"), ID = c(9L, 26L, 34L, 53L, 
53L, 53L, 53L, 53L, 55L, 62L, 62L, 62L, 62L, 66L), Opendate = structure(c(3L, 
9L, 12L, 11L, 13L, 2L, 8L, 10L, 14L, 5L, 6L, 7L, 4L, 1L), .Label = c("1/12/2005", 
"1/19/2011", "1/28/2005", "1/8/2014", "10/15/2003", "11/11/2005", 
"12/16/2013", "12/30/2011", "2/22/2008", "4/2/2012", "5/12/2010", 
"7/28/2011", "8/17/2010", "9/7/2005"), class = "factor"), 
Enrollment = c(0.2, 1, 0.6, 0, 0.3, 0.2, 2.4, 0.3, 0.1, 0.2, 
0.1, 0.2, 0.6, 0)), .Names = c("Number", "Trial", "ID", "Opendate", 
"Enrollment"), class = "data.frame", row.names = c(NA, -14L)) 
関連する問題