您可以使用宽格式或长格式的数据。这是非常重要的事情,因为可用的方法因格式而异。我知道您必须使用reshape软件包melt()
并cast()
从中进行工作,但是似乎有些事情我没有得到。
有人可以简要概述一下您如何执行此操作吗?
您可以使用宽格式或长格式的数据。这是非常重要的事情,因为可用的方法因格式而异。我知道您必须使用reshape软件包melt()
并cast()
从中进行工作,但是似乎有些事情我没有得到。
有人可以简要概述一下您如何执行此操作吗?
Answers:
在Hadley Wickham的网站上有很多关于该软件包的资源(现在称为reshape2
),包括论文的链接。该软件包位于《统计软件杂志》上。
这是本文中的一个简短示例:
> require(reshape2)
Loading required package: reshape2
> data(smiths)
> smiths
subject time age weight height
1 John Smith 1 33 90 1.87
2 Mary Smith 1 NA NA 1.54
我们注意到数据是广泛的形式。为了简化起见,我们使smiths
数据框熔化:
> melt(smiths)
Using subject as id variables
subject variable value
1 John Smith time 1.00
2 Mary Smith time 1.00
3 John Smith age 33.00
4 Mary Smith age NA
5 John Smith weight 90.00
6 Mary Smith weight NA
7 John Smith height 1.87
8 Mary Smith height 1.54
注意如何melt()
选择变量之一作为id,但是我们可以通过参数明确指出要使用的变量'id'
:
> melt(smiths, id = "subject")
subject variable value
1 John Smith time 1.00
2 Mary Smith time 1.00
3 John Smith age 33.00
4 Mary Smith age NA
5 John Smith weight 90.00
6 Mary Smith weight NA
7 John Smith height 1.87
8 Mary Smith height 1.54
这是来自的另一个示例?cast
:
#Air quality example
names(airquality) <- tolower(names(airquality))
aqm <- melt(airquality, id=c("month", "day"), na.rm=TRUE)
如果我们存储熔融数据帧,就可以铸造成其他形式。在reshape
(称为reshape2
)的新版本中,有一些函数acast()
,分别dcast()
返回类似数组的结果(数组,矩阵,向量)或数据帧。这些功能还采用了汇总功能(例如mean()
),以熔融形式提供数据摘要。例如,根据上面的“空气质量”示例,我们可以为数据集中的变量生成宽泛的每月平均值:
> dcast(aqm, month ~ variable, mean)
month ozone solar.r wind temp
1 5 23.61538 181.2963 11.622581 65.54839
2 6 29.44444 190.1667 10.266667 79.10000
3 7 59.11538 216.4839 8.941935 83.90323
4 8 59.96154 171.8571 8.793548 83.96774
5 9 31.44828 167.4333 10.180000 76.90000
有真的只有两个主要功能reshape2
:melt()
和acast()
和dcast()
配对。查看这两个功能的帮助页面中的示例,请访问Hadley的网站(上面的链接),并查看我提到的论文。那应该让您开始。
您可能还会研究Hadley的plyr
软件包,该软件包的功能与之相似,reshape2
但除其他功能外,还可以做很多其他事情。
dcast(aqm, month ~ variable)
,没有汇总功能怎么办?
?dcast
将告诉您的内容(请参阅参数的详细信息fun.aggregate
)。
您不必使用melt
和cast
。
重塑数据可以通过多种方式完成。在您引用的特定示例中,recast
with的使用aggregate
是多余的,因为aggregate
任务本身就可以很好地完成工作。
aggregate(cbind(LPMVTUZ, LPMVTVC, LPMVTXC) ~ year, dtm, sum)
# or even briefer by first removing the columns you don't want to use
aggregate(. ~ year, dtm[,-2], sum)
我喜欢您在博客中如何解释 melt
正在做什么。很少有人知道这一点,一旦您看到它,就可以更轻松地了解其cast
工作原理以及如何编写自己的函数(如果需要)。
请参阅reshape2 Wiki。它肯定会提供您期望的更多示例。
只是注意到这里没有提到更有效,更广泛的重塑方法 data.table
,因此我在不作任何评论的情况下就Zach / Arun在StackOverflow上针对类似问题的出色回答发表了意见:
特别是在 data.table
GitHub页面: