R 创建重复的开始和结束日期
我有一个包含许多变量的数据集。感兴趣的是:ID、事件、开始、结束、评估日期。显示了一个示例数据集R 创建重复的开始和结束日期,r,date,max,grouping,R,Date,Max,Grouping,我有一个包含许多变量的数据集。感兴趣的是:ID、事件、开始、结束、评估日期。显示了一个示例数据集 ID Episode Start End AssessmentDate 1 1 1/1/2012 12/21/2012 1/1/2012 1 1 1/1/2010 12/21/2012 12/12/2012 1 1 1/1/2010 12/21/2012 12/21/2012 1
ID Episode Start End AssessmentDate
1 1 1/1/2012 12/21/2012 1/1/2012
1 1 1/1/2010 12/21/2012 12/12/2012
1 1 1/1/2010 12/21/2012 12/21/2012
1 2 1/1/2013 . 1/2/2013
1 2 1/1/2013 . 2/2/2013
1 2 1/1/2013 . 3/2/2013
2 1 1/1/2012 . 4/1/2012
2 1 1/1/2010 . 5/12/2012
2 1 1/1/2010 . 6/21/2012
2 2 1/1/2013 . 7/2/2013
2 2 1/1/2013 . 8/2/2013
2 2 1/1/2013 . 9/2/2013
我有每个人的开始日期,但没有任何结束日期。我想确定每一次发作的结束日期,以及每名患者,10000名患者的结束日期。我希望结束日期是每集编号的最后一次评估日期,并且我希望在第一次评估日期和最后一次评估日期之间的每一行都显示此日期
我读了一些关于根据ID和情节将数据集分成许多更小的部分的文章,但我觉得应该有一种更简单的方法来做到这一点。我是新来R的,来自SAS,在SAS遇到这样的问题不会给我带来太多麻烦
如果您对我的数据准备有任何意见,我将不胜感激 您可以使用
ddply()
从plyr
库中按事件查找最大评估日期:
df <- data.frame(id=1, Episode=c(1,1,1,2,2,2), AssessmentDate=as.Date(c("2012-01-01", "2012-12-12", "2012-12-21", "2013-01-02", "2013-02-02", "2013-03-02")))
library(plyr)
df <- ddply(df, .(Episode), transform, End=max(AssessmentDate))
df
如果您想按患者进行操作,您可以使用ddply()
和(ID)
(假设可以识别患者)或类似的方法
也可以使用by()
执行此操作,但会变得有点复杂,因为它会将数据拆分为由分组变量的值标识的列表
编辑:此外,如果
事件
在整个数据帧中不是唯一的,即对每个患者重复,您可以根据两个变量进行分组,即ddply(df,.(ID,事件),…)
您可以使用plyr
库中的ddply()
按事件查找最大评估日期:
df <- data.frame(id=1, Episode=c(1,1,1,2,2,2), AssessmentDate=as.Date(c("2012-01-01", "2012-12-12", "2012-12-21", "2013-01-02", "2013-02-02", "2013-03-02")))
library(plyr)
df <- ddply(df, .(Episode), transform, End=max(AssessmentDate))
df
如果您想按患者进行操作,您可以使用ddply()
和(ID)
(假设可以识别患者)或类似的方法
也可以使用by()
执行此操作,但会变得有点复杂,因为它会将数据拆分为由分组变量的值标识的列表
编辑:此外,如果
事件
在整个数据帧中不是唯一的,即对每个患者重复,您可以根据两个变量进行分组,即ddply(df,.(ID,事件),…)
您可以使用plyr
库中的ddply()
按事件查找最大评估日期:
df <- data.frame(id=1, Episode=c(1,1,1,2,2,2), AssessmentDate=as.Date(c("2012-01-01", "2012-12-12", "2012-12-21", "2013-01-02", "2013-02-02", "2013-03-02")))
library(plyr)
df <- ddply(df, .(Episode), transform, End=max(AssessmentDate))
df
如果您想按患者进行操作,您可以使用ddply()
和(ID)
(假设可以识别患者)或类似的方法
也可以使用by()
执行此操作,但会变得有点复杂,因为它会将数据拆分为由分组变量的值标识的列表
编辑:此外,如果
事件
在整个数据帧中不是唯一的,即对每个患者重复,您可以根据两个变量进行分组,即ddply(df,.(ID,事件),…)
您可以使用plyr
库中的ddply()
按事件查找最大评估日期:
df <- data.frame(id=1, Episode=c(1,1,1,2,2,2), AssessmentDate=as.Date(c("2012-01-01", "2012-12-12", "2012-12-21", "2013-01-02", "2013-02-02", "2013-03-02")))
library(plyr)
df <- ddply(df, .(Episode), transform, End=max(AssessmentDate))
df
如果您想按患者进行操作,您可以使用ddply()
和(ID)
(假设可以识别患者)或类似的方法
也可以使用by()
执行此操作,但会变得有点复杂,因为它会将数据拆分为由分组变量的值标识的列表
编辑:另外,如果
插曲
在整个数据帧中不是唯一的,即它对每个患者重复,您可以根据这两个变量进行分组,即ddply(df,.(ID,插曲),…)
假设您正确地将值读入日期,并将“.”作为R中的NA
值进行处理,您的示例数据帧应该具有此结构
dd<-structure(list(ID = c(1L, 1L, 1L, 1L, 1L, 1L), Episode = c(1L,
1L, 1L, 2L, 2L, 2L), Start = structure(c(15340, 14610, 14610,
15706, 15706, 15706), class = "Date"), End = structure(c(15695,
15695, 15695, NA, NA, NA), class = "Date"), AssessmentDate = structure(c(15340,
15686, 15695, 15707, 15738, 15766), class = "Date")), .Names = c("ID",
"Episode", "Start", "End", "AssessmentDate"), row.names = c(NA,
-6L), class = "data.frame")
给
ID Episode Start End AssessmentDate NewEnd
1 1 1 2012-01-01 2012-12-21 2012-01-01 2012-12-21
2 1 1 2010-01-01 2012-12-21 2012-12-12 2012-12-21
3 1 1 2010-01-01 2012-12-21 2012-12-21 2012-12-21
4 1 2 2013-01-01 <NA> 2013-01-02 2013-03-02
5 1 2 2013-01-01 <NA> 2013-02-02 2013-03-02
6 1 2 2013-01-01 <NA> 2013-03-02 2013-03-02
ID事件开始结束评估日期新结束
1 1 1 2012-01-01 2012-12-21 2012-01-01 2012-12-21
2 1 1 2010-01-01 2012-12-21 2012-12-12 2012-12-21
3 1 1 2010-01-01 2012-12-21 2012-12-21 2012-12-21
4 1 2 2013-01-01 2013-01-02 2013-03-02
5 1 2 2013-01-01 2013-02-02 2013-03-02
6 1 2 2013-01-01 2013-03-02 2013-03-02
在这里,我没有覆盖现有的结束值。我不确定在不匹配的情况下要做什么。假设您正确地将值读入日期,并将“.”视为R中的
NA
值,那么示例数据框应该具有此结构
dd<-structure(list(ID = c(1L, 1L, 1L, 1L, 1L, 1L), Episode = c(1L,
1L, 1L, 2L, 2L, 2L), Start = structure(c(15340, 14610, 14610,
15706, 15706, 15706), class = "Date"), End = structure(c(15695,
15695, 15695, NA, NA, NA), class = "Date"), AssessmentDate = structure(c(15340,
15686, 15695, 15707, 15738, 15766), class = "Date")), .Names = c("ID",
"Episode", "Start", "End", "AssessmentDate"), row.names = c(NA,
-6L), class = "data.frame")
给
ID Episode Start End AssessmentDate NewEnd
1 1 1 2012-01-01 2012-12-21 2012-01-01 2012-12-21
2 1 1 2010-01-01 2012-12-21 2012-12-12 2012-12-21
3 1 1 2010-01-01 2012-12-21 2012-12-21 2012-12-21
4 1 2 2013-01-01 <NA> 2013-01-02 2013-03-02
5 1 2 2013-01-01 <NA> 2013-02-02 2013-03-02
6 1 2 2013-01-01 <NA> 2013-03-02 2013-03-02
ID事件开始结束评估日期新结束
1 1 1 2012-01-01 2012-12-21 2012-01-01 2012-12-21
2 1 1 2010-01-01 2012-12-21 2012-12-12 2012-12-21
3 1 1 2010-01-01 2012-12-21 2012-12-21 2012-12-21
4 1 2 2013-01-01 2013-01-02 2013-03-02
5 1 2 2013-01-01 2013-02-02 2013-03-02
6 1 2 2013-01-01 2013-03-02 2013-03-02
在这里,我没有覆盖现有的结束值。我不确定在不匹配的情况下要做什么。假设您正确地将值读入日期,并将“.”视为R中的
NA
值,那么示例数据框应该具有此结构
dd<-structure(list(ID = c(1L, 1L, 1L, 1L, 1L, 1L), Episode = c(1L,
1L, 1L, 2L, 2L, 2L), Start = structure(c(15340, 14610, 14610,
15706, 15706, 15706), class = "Date"), End = structure(c(15695,
15695, 15695, NA, NA, NA), class = "Date"), AssessmentDate = structure(c(15340,
15686, 15695, 15707, 15738, 15766), class = "Date")), .Names = c("ID",
"Episode", "Start", "End", "AssessmentDate"), row.names = c(NA,
-6L), class = "data.frame")
给
ID Episode Start End AssessmentDate NewEnd
1 1 1 2012-01-01 2012-12-21 2012-01-01 2012-12-21
2 1 1 2010-01-01 2012-12-21 2012-12-12 2012-12-21
3 1 1 2010-01-01 2012-12-21 2012-12-21 2012-12-21
4 1 2 2013-01-01 <NA> 2013-01-02 2013-03-02
5 1 2 2013-01-01 <NA> 2013-02-02 2013-03-02
6 1 2 2013-01-01 <NA> 2013-03-02 2013-03-02
ID事件开始结束评估日期新结束
1 1 1 2012-01-01 2012-12-21 2012-01-01 2012-12-21
2 1 1 2010-01-01 2012-12-21 2012-12-12 2012-12-21
3 1 1 2010-01-01 2012-12-21 2012-12-21 2012-12-21
4 1 2 2013-01-01 2013-01-02 2013-03-02
5 1 2 2013-01-01 2013-02-02 2013-03-02
6 1 2 2013-01-01 2013-03-02 2013-03-02
在这里,我没有覆盖现有的结束值。我不确定在不匹配的情况下要做什么。假设您正确地将值读入日期,并将“.”视为R中的
NA
值,那么示例数据框应该具有此结构
dd<-structure(list(ID = c(1L, 1L, 1L, 1L, 1L, 1L), Episode = c(1L,
1L, 1L, 2L, 2L, 2L), Start = structure(c(15340, 14610, 14610,
15706, 15706, 15706), class = "Date"), End = structure(c(15695,
15695, 15695, NA, NA, NA), class = "Date"), AssessmentDate = structure(c(15340,
15686, 15695, 15707, 15738, 15766), class = "Date")), .Names = c("ID",
"Episode", "Start", "End", "AssessmentDate"), row.names = c(NA,
-6L), class = "data.frame")
给
ID Episode Start End AssessmentDate NewEnd
1 1 1 2012-01-01 2012-12-21 2012-01-01 2012-12-21
2 1 1 2010-01-01 2012-12-21 2012-12-12 2012-12-21
3 1 1 2010-01-01 2012-12-21 2012-12-21 2012-12-21
4 1 2 2013-01-01 <NA> 2013-01-02 2013-03-02
5 1 2 2013-01-01 <NA> 2013-02-02 2013-03-02
6 1 2 2013-01-01 <NA> 2013-03-02 2013-03-02
ID事件开始结束评估日期新结束
1 1 1 201