从reshape2重新定义基础vs dcast,缺少值

时间:2016-01-20 07:51:31

标签: r reshape missing-data reshape2

这个数据框,

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函数中处理这些缺失值,因为我想使用这个值?

0 个答案:

没有答案