首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >reshape2和宽(估算)时间变量

reshape2和宽(估算)时间变量
EN

Stack Overflow用户
提问于 2016-11-26 21:10:58
回答 1查看 128关注 0票数 3

我知道基R中的reshape可以转换成长格式,其中时间是从存根变量名AB推算出来的,例如:

代码语言:javascript
复制
wide = data.frame(A.2010 = c('a', 'b', 'c'),
                  A.2011 = c('f', 'g', 'd'),
                  B.2010 = c('A', 'B', 'C'),
                  B.2011 = c('G', 'G', 'H'),
                  z = runif(3),
                  x = runif(3))

wide
#  A.2010 A.2011 B.2010 B.2011         z          x
#1      a      f      A      G 0.3626823 0.67212468
#2      b      g      B      G 0.3726911 0.09663248
#3      c      d      C      H 0.9807237 0.31259394

变成:

代码语言:javascript
复制
reshape(wide, direction = 'long', sep = '.',
        varying = c('A.2010', 'A.2011', 'B.2010', 'B.2011'))
#               z          x time A B id
#1.2010 0.3626823 0.67212468 2010 a A  1
#2.2010 0.3726911 0.09663248 2010 b B  2
#3.2010 0.9807237 0.31259394 2010 c C  3
#1.2011 0.3626823 0.67212468 2011 f G  1
#2.2011 0.3726911 0.09663248 2011 g G  2
#3.2011 0.9807237 0.31259394 2011 d H  3

我能用reshape2::melt完成同样的任务吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-27 06:09:01

看起来,基本r中的reshape是最好的工具,因为reshape2包中的melt函数中没有类似的功能。不过,您可以使用patterns函数在melt.data.table中实现类似的功能。

代码语言:javascript
复制
library(reshape2)
library(data.table)

wide = data.table(wide)

long = melt(wide, id.vars = c("z", "x"), measure = patterns("^A", "^B"),
            value.name = c("A", "B"), variable.name = "time")

> long
           z         x time A B
1: 0.3421681 0.8432707    1 a A
2: 0.1243282 0.5096108    1 b B
3: 0.3650165 0.1441660    1 c C
4: 0.3421681 0.8432707    2 f G
5: 0.1243282 0.5096108    2 g G
6: 0.3650165 0.1441660    2 d H

请注意,melt识别不同的“时间”,并正确地对它们进行分组,但没有按需要使用2010年和2011年。解决办法是手动对级别进行重新编码,这应该是微不足道的。

代码语言:javascript
复制
levels(long$time) = c("2010", "2011")

> long
           z         x time A B
1: 0.3421681 0.8432707 2010 a A
2: 0.1243282 0.5096108 2010 b B
3: 0.3650165 0.1441660 2010 c C
4: 0.3421681 0.8432707 2011 f G
5: 0.1243282 0.5096108 2011 g G
6: 0.3650165 0.1441660 2011 d H

我希望这能帮到你!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40823194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档