我试图根据R中那些列中的日期对个别患者的列进行排序。我做了一个示例数据集,但是,数据集不会返回日期,而是长数字(不知道为什么)。请原谅我的创建数据帧的也许是可笑的方式:)...根据日期对名称()进行排序
dd<-
data.frame(rbind(
c(as.POSIXct(as.Date("01/01/2008", format="%d/%m/%Y")),
as.POSIXct(as.Date("01/01/2009", format="%d/%m/%Y")),
as.POSIXct(as.Date("01/01/2011", format="%d/%m/%Y")),
as.POSIXct(as.Date("01/01/2010", format="%d/%m/%Y")))
,
c(as.POSIXct(as.Date("01/01/2002", format="%d/%m/%Y")),
as.POSIXct(as.Date("01/01/2001", format="%d/%m/%Y")),
as.POSIXct(as.Date("01/01/2006", format="%d/%m/%Y")),
as.POSIXct(as.Date("01/01/2004", format="%d/%m/%Y")))
))
dd$patient[1] <- 1
dd$patient[2] <- 2
names(dd) <- c("date1", "date2", "date3", "date4", "patient")
什么我以后是每名患者科拉姆名,通过那些列中的日期排序列表。因此,
患者1:DATE1,DATE2,date4,DATE3
患者2:date2的,DATE1,date4,DATE3
编辑:
所以,还有一两件事。如果一个日期丢失了怎么办?这样的:
dd <- data.frame(
patient = 1:2,
date1 = as.Date(c("01/01/2008","01/01/2002"),format="%d/%m/%Y"),
date2 = as.Date(c("01/01/2009","01/01/2001"),format="%d/%m/%Y"),
date3 = as.Date(c("01/01/2011","01/01/2006"),format="%d/%m/%Y"),
date4 = as.Date(c("01/01/2010","01/01/2004"),format="%d/%m/%Y")
)
dd[2,2]<- NA
马修斯给出了答案:
> t(apply(dd, 1, function(x) c(x[1], names(x[-1])[order(x[-1])])))
patient
[1,] "1" "date1" "date2" "date4" "date3"
[2,] "2" "date2" "date4" "date3" "date1"
因此丢失的数据点的列名包括在结束日期的排序列表。但我还想它是不是有这样...:
patient
[1,] "1" "date1" "date2" "date4" "date3"
[2,] "2" "date2" "date4" "date3"
为什么在没有时间分量时使用'POSIXct'?如果您不需要H:M:S,请避免使用'POSIXct',否则您可能会遇到夏令时和时区问题。 –