我正在使用Rstudio(版本.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个数据点。我试图写一个脚本来回顾之前的事情,但我还没有能够控制身份证。另外,我想如果我回顾一年,两年,五年等等,它不会有太大的不同......?
非常感谢任何帮助。
答案 0 :(得分:1)
至于数据流程,我认为您想要的是在两个日期之间获得差异。您可以通过几种方式实现这一目标。在这里,我选择在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
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))