重塑我的数据框并添加一个标志

Reshaping my data frame and adding a flag

我有一个如下所示的数据框:

df <- 
ID   TIME   IPREDP   IPREDM
1     0.5    10        5
1     1.0    15        7
2     0.7    8         2

我想重塑我的数据并将 IPREDPIPREDM 列合并为一个名为 IPRED 的列,并为每个列添加一个名为 DVID 的标志并删除原始 IPREDPIPREDM 列。所以输出应该是这样的:

dfout <- 
ID    TIME    DVID    IPRED
1     0.5     1       10
1     0.5     2       5
1     1.0     1       15
1     1.0     2       7
2     0.7     1       8
2     0.7     2       2

如何在 R 中以最快的方式实现这一点?

library(reshape2)
dfout <- melt(df,measure=c("IPREDP","IPREDM"), value="IPRED", variable="DVID")
dfout$DVID <- as.integer(dfout$DVID)

我们可以使用 melt 来自 data.table

library(data.table)
melt(setDT(df), id.var = c("ID", "TIME"), value.name = "IPRED")[
          order(ID)][, DVID := 1:.N,.(ID, variable)][]
   library("data.table") 
   df1 <- melt(df, id = c("ID", "TIME"), measure  = c("IPREDP", "IPREDM"), value.name = "IPRED")
   df1$DVID <- as.integer(df1$variable)
   df1[, variable := NULL]