【问题标题】:reshape data by ID and add all values belong to one person in one row in R按 ID 重塑数据并添加所有值属于 R 中一行中的一个人
【发布时间】:2014-03-18 13:46:43
【问题描述】:

我的数据框如下所示:

ID  V1 V2  V3
1   1  2   3
1   2  3   4
1   3  4   5
2   3  4   5
3   4  5   6
3   2  3   4

我需要重塑数据框,以便所有记录都属于同一行中的一个人 像这样:

ID V1 V2 V3 V1_2 V2_2 V3_2 V1_3 V2_3 V3_3
1  1  2  3  2     3    4    3    4    5
2  3  4  5
3  4  5  6  2     3    4  

由于每个人的记录数不同,新的数据框每一行的长度也会不同。我怎样才能做到这一点?

【问题讨论】:

    标签: r reshape


    【解决方案1】:

    一种直接的方法是使用reshape2 包,但您必须添加辅助 ID。

    ### The next line creates a secondary ID variable
    mydf$ID2 <- ave(mydf$ID, mydf$ID, FUN = seq_along)
    
    library(reshape2)
    dfL <- melt(mydf, id.vars=c("ID", "ID2"))
    dcast(dfL, ID ~ variable + ID2)
    #   ID V1_1 V1_2 V1_3 V2_1 V2_2 V2_3 V3_1 V3_2 V3_3
    # 1  1    1    2    3    2    3    4    3    4    5
    # 2  2    3   NA   NA    4   NA   NA    5   NA   NA
    # 3  3    4    2   NA    5    3   NA    6    4   NA
    

    或者,在如上所述添加“ID2”之后,您也可以直接使用基 R 的reshape 进行整形。列顺序不同,但数据相同。

    reshape(mydf, direction = "wide", idvar="ID", timevar="ID2")
    #   ID V1.1 V2.1 V3.1 V1.2 V2.2 V3.2 V1.3 V2.3 V3.3
    # 1  1    1    2    3    2    3    4    3    4    5
    # 4  2    3    4    5   NA   NA   NA   NA   NA   NA
    # 5  3    4    5    6    2    3    4   NA   NA   NA
    

    【讨论】:

      猜你喜欢
      • 2021-01-01
      • 1970-01-01
      • 2016-12-23
      • 2020-07-26
      • 1970-01-01
      • 2021-05-26
      • 2020-08-27
      • 2019-05-04
      相关资源
      最近更新 更多