如何在R中的宽和长格式之间更改数据?[关闭]


32

您可以使用宽格式或长格式的数据。这是非常重要的事情,因为可用的方法因格式而异。我知道您必须使用reshape软件包melt()cast()从中进行工作,但是似乎有些事情我没有得到。

有人可以简要概述一下您如何执行此操作吗?


请提供您要实现的示例。您究竟不知道什么?
mpiktas 2011年

3
这是我的博客文章,其中包含使用melt和的示例cast。从宽格式到长格式的转换是在一个阶段完成的。确实没有什么特别的。
mpiktas 2011年

欢迎使用统计信息。您可能会发现,在问题中包含一个小的可重复生成的数据集以解释您的需求会有所帮助。阅读sigmafield.org/2011/01/18/…了解更多。
PaulHurleyuk

有关许多方法,请参见此SO问题
Axeman

Answers:


26

在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

有真的只有两个主要功能reshape2melt()acast()dcast()配对。查看这两个功能的帮助页面中的示例,请访问Hadley的网站(上面的链接),并查看我提到的论文。那应该让您开始。

您可能还会研究Hadley的plyr软件包,该软件包的功能与之相似,reshape2但除其他功能外,还可以做很多其他事情。


dcast(aqm, month ~ variable),没有汇总功能怎么办?
QED

@CravingSpirit它将返回每个变量的观察次数。阅读?dcast将告诉您的内容(请参阅参数的详细信息fun.aggregate)。
恢复莫妮卡-G.辛普森,


7

您不必使用meltcast

重塑数据可以通过多种方式完成。在您引用的特定示例中,recastwith的使用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工作原理以及如何编写自己的函数(如果需要)。



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.