重塑我的数据框并添加一个标志
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
我想重塑我的数据并将 IPREDP
和 IPREDM
列合并为一个名为 IPRED
的列,并为每个列添加一个名为 DVID
的标志并删除原始 IPREDP
和 IPREDM
列。所以输出应该是这样的:
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]
我有一个如下所示的数据框:
df <-
ID TIME IPREDP IPREDM
1 0.5 10 5
1 1.0 15 7
2 0.7 8 2
我想重塑我的数据并将 IPREDP
和 IPREDM
列合并为一个名为 IPRED
的列,并为每个列添加一个名为 DVID
的标志并删除原始 IPREDP
和 IPREDM
列。所以输出应该是这样的:
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]