如何用重塑r"解冻"数据

LP_*_*640 16 r reshape reshape2

我有一个数据框,我使用reshape包融化,我想"解开".

这是融化数据的玩具示例(实际数据帧为500x100或更大):

variable<-c(rep("X1",3),rep("X2",3),rep("X3",3))
value<-c(rep(rnorm(1,.5,.2),3),rep(rnorm(1,.5,.2),3),rep(rnorm(1,.5,.2),3))
dat <-data.frame(variable,value)
dat
 variable     value
1       X1 0.5285376
2       X1 0.5285376
3       X1 0.5285376
4       X2 0.1694908
5       X2 0.1694908
6       X2 0.1694908
7       X3 0.7446906
8       X3 0.7446906
9       X3 0.7446906
Run Code Online (Sandbox Code Playgroud)

每个变量(X1,X2,X3)具有在3个不同时间估计的值(在该玩具示例中恰好相同,但事实并非如此).

我希望以下列形式得到它(返回):

     X1        X2        X3
1 0.5285376 0.1694908 0.7446906
2 0.5285376 0.1694908 0.7446906
3 0.5285376 0.1694908 0.7446906
Run Code Online (Sandbox Code Playgroud)

基本上,我希望变量列在ID(X1,X2等)上排序并成为列标题.我已经尝试了各种演员阵容,dcast,重铸等等.并且似乎无法以我想要的格式获取数据.很容易将数据从宽格式"融化"到更长的格式(例如dat数据集),但是将其恢复到原来很困难.有任何想法吗?我知道这是相对简单的,但我很难概念化如何在reshape或reshape2中执行此操作.

谢谢,LP

jor*_*ran 21

我通常通过创建一个id列然后使用dcast:

> dat
  variable     value
1       X1 0.4299397
2       X1 0.4299397
3       X1 0.4299397
4       X2 0.2531551
5       X2 0.2531551
6       X2 0.2531551
7       X3 0.3972119
8       X3 0.3972119
9       X3 0.3972119
> dat$id <- rep(1:3,times = 3)
> dcast(data = dat,formula = id~variable,fun.aggregate = sum,value.var = "value")
  id        X1        X2        X3
1  1 0.4299397 0.2531551 0.3972119
2  2 0.4299397 0.2531551 0.3972119
3  3 0.4299397 0.2531551 0.3972119
Run Code Online (Sandbox Code Playgroud)

  • 当他们提到值的数量可能不一致时,可以考虑将`dat $ id`更改为`with(dat,ave(rep(1,nrow(dat)),variable,FUN = seq_along)) . (2认同)