gpt4 book ai didi

r - 没有 ID 变量的 dcast

转载 作者:行者123 更新时间:2023-12-04 12:28:45 25 4
gpt4 key购买 nike

在“Reshape2 简介”包中,Sean C. Anderson 提供了以下示例。

他使用空气质量数据并重命名列名

names(airquality) <- tolower(names(airquality))

数据看起来像
#   ozone solar.r wind temp month day
# 1 41 190 7.4 67 5 1
# 2 36 118 8.0 72 5 2
# 3 12 149 12.6 74 5 3
# 4 18 313 11.5 62 5 4
# 5 NA NA 14.3 56 5 5
# 6 28 NA 14.9 66 5 6

然后他将它们融化
aql <- melt(airquality, id.vars = c("month", "day"))

要得到
#   month day variable value
# 1 5 1 ozone 41
# 2 5 2 ozone 36
# 3 5 3 ozone 12
# 4 5 4 ozone 18
# 5 5 5 ozone NA
# 6 5 6 ozone 28

最后他得到了原始的(不同的列顺序)
aqw <- dcast(aql, month + day ~ variable)

我的问题

假设现在我们没有 ID 变量(即月和日)并且已经按如下方式融合了数据
aql <- melt(airquality)

看起来像
#   variable value
# 1 ozone 41
# 2 ozone 36
# 3 ozone 12
# 4 ozone 18
# 5 ozone NA
# 6 ozone 28

我的问题是我怎样才能得到原始的?原始的将对应于
#   ozone solar.r wind temp 
# 1 41 190 7.4 67
# 2 36 118 8.0 72
# 3 12 149 12.6 74
# 4 18 313 11.5 62
# 5 NA NA 14.3 56
# 6 28 NA 14.9 66

最佳答案

另一种选择是 unstack

out <- unstack(aql,value~variable)
head(out)
# ozone solar.r wind temp month day
#1 41 190 7.4 67 5 1
#2 36 118 8.0 72 5 2
#3 12 149 12.6 74 5 3
#4 18 313 11.5 62 5 4
#5 NA NA 14.3 56 5 5
#6 28 NA 14.9 66 5 6

由于问题是关于 dcast ,我们可以创建一个序列列,然后使用 dcast
aql$indx <- with(aql, ave(seq_along(variable), variable, FUN=seq_along))
out1 <- dcast(aql, indx~variable, value.var='value')[,-1]
head(out1)
# ozone solar.r wind temp month day
#1 41 190 7.4 67 5 1
#2 36 118 8.0 72 5 2
#3 12 149 12.6 74 5 3
#4 18 313 11.5 62 5 4
#5 NA NA 14.3 56 5 5
#6 28 NA 14.9 66 5 6

如果您正在使用 data.table ,开发版 data.table IE。 v1.9.5还有 dcast功能。安装devel版本的说明是 here
 library(data.table)#v1.9.5+
setDT(aql)[, indx:=1:.N, variable]
dcast(aql, indx~variable, value.var='value')[,-1]

关于r - 没有 ID 变量的 dcast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31238013/

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