我有一个宽大的数据集,有超过1500列。由于许多变量都是重复的,我想重塑成长形。但是,r会抛出错误:
Error in guess(varying) :
Failed to guess time-varying variables from their names
试图通过玩具示例来理解这一点我发现
u<-data.frame(id=1:100,f.1=rnorm(100),u.1=rnorm(100),i.1=rnorm(100),f.2=rnorm(100),u.2=rnorm(100),i.2=rnorm(100),
f.3=rnorm(100),u.3=rnorm(100),i.3=rnorm(100))
reshape(u,varying=2:10,direction="long")
工作正常。但是,我的数据看起来更像是:
u<-data.frame(id=1:100,f1=rnorm(100),u1=rnorm(100),i1=rnorm(100),f2=rnorm(100),u2=rnorm(100),i2=rnorm(100),
f3=rnorm(100),u3=rnorm(100),i3=rnorm(100))
reshape(u,varying=2:10,direction="long")
这就是我输了的地方。任何聪明的想法,除了更改变量名称(这是累人的),我怎么能这样做?
答案 0 :(得分:10)
添加v.names
参数:
reshape(u,varying=2:10,direction="long", v.names=c("f", "u", "i"))
id time f u i
1.1 1 1 1.7821678 0.5144692 0.0006889928
2.1 2 1 -0.5036801 1.8242030 0.9695553817
3.1 3 1 1.1857706 0.6469423 0.6775602175
4.1 4 1 -0.5759202 -1.0349980 0.7183451146
5.1 5 1 -2.3559773 0.8598020 0.5506339475
6.1 6 1 -0.8047651 -1.4768172 -0.3667918383
...
答案 1 :(得分:5)
我看到了Andrie的解决方案,但也许我在理解rehape
语法方面的努力也很有用。 'varying'参数应该是一个命名向量(或列表),其列索引按名称分组:
reshape(u, varying=c( f=c(2,5,8), u=c(3,6,9), i=c(4,7,10) ), direction="long")
这也有用(因为这些名字意味着分组):
reshape(u,varying=names(u)[2:10], direction="long")
我回去尝试你的代码并发现它也有效,所以我想知道你是否想要一些我们猜不到的东西?
答案 2 :(得分:3)
只需添加选项sep = ""
,让reshape
知道您的列名称不会被.
分开。