仅转置data.frame中的某些列

时间:2016-03-21 16:36:07

标签: r reshape data-manipulation

以下是数据

v1-v4

问题: 如何转置数据

  1. 转置am
  2. group中的值设为列变量
  3. v1-v4变量按group metric 2015-10-31 2015-11-30 2015-12-31 A v1 693 618 229 A v2 803 715 994 A v3 700 200 720 A v4 17% 38% 19% B v1 524 249 539 B v2 859 965 543 B v3 302 215 332 B v4 77% 54% 57% ...
  4. 的数量复制

    我想要产生的结果:

    name <- mydata$am
    data <- as.data.frame(t(mydata[, -1]))
    colnames(mydata) <- name
    

    到目前为止我尝试了什么:

    group

    这不会按照我想要的方式处理{{1}}变量。

    感谢您的帮助。

1 个答案:

答案 0 :(得分:6)

基本的想法是首先采用“长”格式,然后采用“宽”格式。

以下是一些方法....

melt + dcast

library(data.table) ## or library(reshape2)
dcast(melt(as.data.table(mydf), id.vars = c("am", "group")), 
      group + variable ~ am, value.var = "value")

<强> recast

(这与上面基本相同,但只需一步。)

library(reshape2)
recast(mydf, group + variable ~ am, id.var = c("am", "group"))

gather + spread

library(dplyr)
library(tidyr)

mydf %>%
  gather(key, value, v1:v4) %>%
  spread(am, value)

<强> reshape

reshape(cbind(mydf[c(1, 2)], stack(mydf[-c(1, 2)])), 
        direction = "wide", idvar = c("group", "ind"), timevar = "am")