这个数据框,
df <- expand.grid(id="01", parameter=c("blood", "saliva"), visit=c("V1", "V2", "V3"))
df$value <- c(1:6)
df$sex <- rep("f", 6)
df
> df
id parameter visit value sex
1 01 blood V1 1 f
2 01 saliva V1 2 f
3 01 blood V2 3 f
4 01 saliva V2 4 f
5 01 blood V3 5 f
6 01 saliva V3 6 f
当我以“宽”格式对其进行整形时,我会使用基础reshape
函数和dcast
中的reshape2
函数获得相同的结果。
reshape(df,
timevar="visit",
idvar=c("id", "parameter", "sex"),
direction="wide")
id parameter sex value.V1 value.V2 value.V3
1 01 blood f 1 3 5
2 01 saliva f 2 4 6
library(reshape2)
dcast(df,
id+parameter+sex~visit,
value.var="value")
id parameter sex V1 V2 V3
1 01 blood f 1 3 5
2 01 saliva f 2 4 6
但如果我添加一些缺失值,结果会有所不同
df$value <- c(1,2,NA,NA,NA,NA)
df$sex <- c(NA,NA,NA,NA,NA,NA)
df
> df
id parameter visit value sex
1 01 blood V1 1 NA
2 01 saliva V1 2 NA
3 01 blood V2 NA NA
4 01 saliva V2 NA NA
5 01 blood V3 NA NA
6 01 saliva V3 NA NA
对于基座reshape
,我只获得一行
reshape(df,
timevar="visit",
idvar=c("id", "parameter", "sex"),
direction="wide")
id parameter sex value.V1 value.V2 value.V3
1 01 blood NA 1 NA NA
使用dcast
,我得到两行
dcast(df,
id+parameter+sex~visit,
value.var="value")
id parameter sex V1 V2 V3
1 01 blood NA 1 NA NA
2 01 saliva NA 2 NA NA
有没有办法在基本reshape
函数中处理这些缺失值,因为我想使用这个值?