gpt4 book ai didi

从 base reshape vs 从具有缺失值的 reshape2 reshape

转载 作者:行者123 更新时间:2023-12-02 01:29:55 28 4
gpt4 key购买 nike

Whis 这个数据框,

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 它时,基本 reshape 函数和 reshape2 中的 dcast 函数得到相同的结果>.

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

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

最佳答案

reshape 代码的相关部分是以下行:

data[, tempidname] <- interaction(data[, idvar], drop = TRUE)

看看交互是如何工作的:

> interaction("A", "B")
[1] A.B
Levels: A.B
> interaction("A", "B", NA)
[1] <NA>
Levels:

但是,比较一下如果 NA 保留为 level 会发生什么:

> interaction("A", "B", addNA(NA))
[1] A.B.NA
Levels: A.B.NA

因此,如果您想获得与基本 R 的 reshape 相同的结果,您需要确保任何“idvar”列都将 NA 保留为一个级别。

例子:

df$sex <- addNA(df$sex)
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
# 2 01 saliva <NA> 2 NA NA

当然,另一个问题是如何将 NA 视为标识变量:-)

关于从 base reshape vs 从具有缺失值的 reshape2 reshape ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34894358/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com