在R中转置复杂的data.frame

Dmi*_*kin 2 r reshape

我的数据看起来像这样,

posture code HR EE  a   b
cycling A03 102 100 3   6
standingA03 99  99  4   6
sitting A03 98  67  5   5
walking A03 97  78  3   6
cycling B01 111 76  5   5
standingB01 100 88  4   4
sitting B01 78  34  4   3
walking B01 99  99  2   2
Run Code Online (Sandbox Code Playgroud)

我需要转置它,使它看起来如下所示:

code    cycling_HR  cycling_EE  cycling_a   cycling_b   standing_HR standing_EE standing_a  standing_b  sitting_HR  sitting_EE  sitting_a   sitting_b   walking_HR  walking_EE  walking_a   walking_b
A03     102    100  3       6   99          99          4   6   98  67  5   5   97  78  3   6
B01     111    76   5       5   100         88          4   4   78  34  4   3   99  99  2   2
Run Code Online (Sandbox Code Playgroud)

等等(抱歉格式化).我无法找到适当的答案来澄清问题.任何援助都会受到欢迎.

A5C*_*2T1 5

这是一个非常基本的"长到宽"的重塑问题.

您可以使用以下reshape功能在基本R中执行此操作:

    reshape(mydf, direction = "wide", idvar = "code", timevar = "posture")
#   code HR.cycling EE.cycling a.cycling b.cycling HR.standing EE.standing
# 1  A03        102        100         3         6          99          99
# 5  B01        111         76         5         5         100          88
#   a.standing b.standing HR.sitting EE.sitting a.sitting b.sitting HR.walking
# 1          4          6         98         67         5         5         97
# 5          4          4         78         34         4         3         99
#   EE.walking a.walking b.walking
# 1         78         3         6
# 5         99         2         2
Run Code Online (Sandbox Code Playgroud)

您还可以查看"dplyr"+"tidyr"方法,可能是这样的:

library(dplyr)
library(tidyr)
mydf %>%
  gather(var, val, HR:b) %>%
  unite(v1, posture, var) %>%
  spread(v1, val)
Run Code Online (Sandbox Code Playgroud)