0

我正在尝试重新格式化数据框中的一些传入数据。它以多列的宽格式读入,我想将其折叠成长格式。我已经为我最近编写的其他代码使用了“融化”来执行此操作,但在这种情况下,我想将测量的变量分成多个列。例如,我的数据大致如下所示:

Time   X-Mean   X-StdDev   Y-Mean   Y-StdDev
1       value    value      value    value
2       value    value      value    value
3       value    value      value    value
4       value    value      value    value
5       value    value      value    value

理想情况下,我希望这些数据重新格式化如下:

Time    Axis     Meas    Value
1       X        Mean    value
1       X        StdDev  value
1       Y        Mean    value
1       Y        StdDev  value
2       X        Mean    value
2       X        StdDev  value
2       Y        Mean    value
2       Y        StdDev  value
.....

根据我的阅读,感觉好像我应该为此使用 cast,但我无法弄清楚语法应该是什么。我现在只是在发现 R,所以任何帮助都将不胜感激!谢谢!

4

2 回答 2

2

难道你不需要variable从结果中拆分列melt()吗?例如:

library(reshape2)
x <- data.frame(id = 1:3, x_mean = rnorm(3), x_sd = rnorm(3,1), y_mean = rchisq(3, 1), y_sd = rchisq(3, df=2))

x.m <- melt(x, id.vars = "id")
x.m[, c("axis", "means")] <- colsplit(x.m$variable, "_", c("axis", "means"))

x.m[order(x.m$id), c("id", "axis", "means", "value")]
#----
   id axis means        value
1   1    x  mean  0.248144412
4   1    x    sd -0.078503777
7   1    y  mean  0.045275132
10  1    y    sd  0.297849771
....

如果还有更多内容,您应该能够将cast()其调整为适当的尺寸。

于 2013-05-08T05:04:39.963 回答
0

这是经典的饲料base::reshape

假设您的 data.frame 被调用dd

# this will guess at split using `.` as the split
reshape(dd, direction = 'long',varying =2:5 )
         Time   time     X     Y id
1.Mean      1   Mean value value  1
2.Mean      2   Mean value value  2
3.Mean      3   Mean value value  3
4.Mean      4   Mean value value  4
5.Mean      5   Mean value value  5
1.StdDev    1 StdDev value value  1
2.StdDev    2 StdDev value value  2
3.StdDev    3 StdDev value value  3
4.StdDev    4 StdDev value value  4
5.StdDev    5 StdDev value value  5
于 2013-05-08T04:58:36.883 回答