R-从长到宽调整

时间:2018-08-18 22:05:59

标签: r reshape

我正在尝试使用R中的reshape()函数将数据框从长整形改成长整形。我能够使用these instructions from R bloggers使用另一个数据集将宽整改成长整形,但是当使用相同的准则时,否则,我会不断收到我不理解的错误:

Error in varying[, i] : incorrect number of dimensions

以下是我的数据示例(PYS_shorter):

id_s phase  A   B       C       D       E       F
1    1      3   1.83    1.35    0.00    0.38    0.67
1    2      2   1.67    1.65    0.00    0.38    0.67
1    3      2   1.67    1.47    0.00    0.15    0.17
1    4      1   1.33    1.59    0.00    0.00    0.00
1    5      1   1.17    1.35    0.38    0.62    1.33
1    6      1   1.00    1.53    0.13    0.08    1.17
1    7      1   1.50    1.29    0.00    0.00    0.33
1    8      1   1.33    1.29    0.00    0.00    0.17
2    1      2   1.50    1.41    0.00    0.00    0.67
2    2      1   1.83    1.35    0.25    0.54    0.83
2    3      1   1.50    1.65    0.00    0.15    1.33
2    4      2   1.83    1.65    0.00    0.00    0.33
2    5      1   1.50    1.41    0.00    0.00    0.17
2    6      1   1.83    1.18    0.00    0.00    0.00
2    7      1   1.17    1.47    0.00    0.00    0.00
2    8      1   1.50    1.76    0.00    0.00    0.00 

这是我的代码:

PYS_WIDE <- reshape(PYS_shorter, 
                varying = c("A","B","C","D","E","F"),
                timevar = "phase", 
                idvar = "id_s", 
                direction="wide", 
                sep ="_")

我在做什么错?错误是什么意思?如何解决这个问题,以便可以将数据框从长到宽重塑(因此具有8个A变量,8个B变量等,每个主题只有一行)?

非常感谢!

3 个答案:

答案 0 :(得分:0)

尝试使用spread中的tidyr。我认为这就是您所需要的。

df <- data.frame(id_s = c(1:26), phase = c(letters), A = c(100:125), B = c(1000:1025))

library(tidyr)
# wide to long
df %>%
  gather(data = ., key = Group_type, value = Value, -id_s, -phase ) -> long


# long to wide
long %>%
  spread(data = ., key = Group_type, value = Value)


head(long)
  id_s phase Group_type Value
1    1     a          A   100
2    2     b          A   101
3    3     c          A   102
4    4     d          A   103
5    5     e          A   104
6    6     f          A   105

head(wide)
  id_s phase   A    B
1    1     a 100 1000
2    2     b 101 1001
3    3     c 102 1002
4    4     d 103 1003
5    5     e 104 1004
6    6     f 105 1005

答案 1 :(得分:0)

dput(您的数据)

idvar
一个或多个长格式变量的名称,它们标识同一组/单个组中的多个记录。这些变量也可能以宽格式出现。

基本上id_s搞砸了您的查询,重塑不知道它是什么。

答案 2 :(得分:0)

删除

varying = c("A","B","C","D","E","F"),

有效,尽管我不知道为什么!