[英]comparing immediate past values to current value in R, missing data too
我正在使用Rstudio(0.99.903版),有一台PC(Windows 8)。 我有一個對我來說真的很難的問題。 數據如下所示:
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之前沒有日期,則不應進行比較。 例如,對於ID 26,將沒有比較。 同樣,對於ID 53,2010年5月12日沒有任何比較,但我想將2010年8月17日與2010年5月12日進行比較,然后將2011年1月19日與2010年8月17日進行比較(但也不適用於2010年5月12日)。 理想情況下,輸出將是點圖,將電流值相對於先驗值進行繪制(優先級在y軸上,電流在x軸上)。 最后,我需要生成一列,該列從之前的值中減去當前值...
有> 20,000個數據點。 我試圖編寫一個腳本來回顧以前的內容,但是我一直無法控制ID。 另外,我想如果回頭看一年,兩年,五年等等,也不會有太大的不同嗎?
任何幫助將非常感激。
至於數據處理,我想您想要的是獲得兩個日期之間天數的差異。 您可以通過幾種方法來實現。 在這里,我選擇在data.table包中使用shift()
。 您可以在函數中指定type = "lag"
並處理減法。 您可以通過指定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
數據
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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.