gpt4 book ai didi

r - 仅转置 data.frame 中的某些列

转载 作者:行者123 更新时间:2023-12-01 09:19:30 25 4
gpt4 key购买 nike

这是数据我有 :

           am   group  v1  v2  v3    v4
1 2015-10-31 A 693 803 700 17%
2 2015-10-31 B 524 859 302 77%
3 2015-10-31 C 266 675 86 7%
4 2015-10-31 D 376 455 650 65%
5 2015-11-30 A 618 715 200 38%
6 2015-11-30 B 249 965 215 54%
7 2015-11-30 C 881 106 184 24%
8 2015-11-30 D 033 047 492 46%
9 2015-12-31 A 229 994 720 19%
10 2015-12-31 B 539 543 332 57%
11 2015-12-31 C 100 078 590 24%
12 2015-12-31 D 517 413 716 57%

问题:
我怎样才能转置数据,使得
  • 转置v1-v4
  • am 中生成值作为列变量
  • group变量按 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%
    ...

    到目前为止我尝试过的:
    name <- mydata$am
    data <- as.data.frame(t(mydata[, -1]))
    colnames(mydata) <- name

    这不处理 group以我想要的方式可变。

    谢谢你的帮助。

    最佳答案

    基本思想是先进入“长”格式,然后进入“宽”格式。

    这里有一些方法可以做到这一点......

    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")

    关于r - 仅转置 data.frame 中的某些列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36136742/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com