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
編集:
それで、もう一つ。1つの日付が欠落している場合はどうなりますか...したがって:
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"