【问题标题】:R: transform data (factor value as column name)R:变换数据(因子值作为列名)
【发布时间】:2015-02-10 03:56:13
【问题描述】:

我有一个要转换为另一种格式的数据集:

数据是这样的(出于隐私问题,我不能放原始数据):

ID1 ID2 Month   Value
1   A   Jan-03  10
2   B   Jan-03  11
1   A   Feb-03  12
2   B   Feb-03  13
1   A   Mar-03  14
2   B   Mar-03  15

我希望 Month 列作为列名,格式如下:

ID1 ID2 Jan-03  Feb-03  Mar-03
1   A   10  12  14
2   B   11  13  16

谢谢!

【问题讨论】:

    标签: r transform


    【解决方案1】:

    你可以试试

     df$Month <- factor(df$Month, levels=unique(df$Month))
     reshape(df, idvar=c('ID1', 'ID2'), timevar='Month', direction='wide')
     #  ID1 ID2 Value.Jan-03 Value.Feb-03 Value.Mar-03
     #1   1   A           10           12           14
     #2   2   B           11           13           15
    

    或者

    library(reshape2)
    dcast(df, ID1+ID2~Month, value.var='Value')
    #   ID1 ID2 Jan-03 Feb-03 Mar-03
    #1   1   A     10     12     14
    #2   2   B     11     13     15
    

    或者

    library(tidyr)
    spread(df, Month, Value)
    #   ID1 ID2 Jan-03 Feb-03 Mar-03
    #1   1   A     10     12     14
    #2   2   B     11     13     15
    

    数据

    df <- structure(list(ID1 = c(1L, 2L, 1L, 2L, 1L, 2L), ID2 = c("A", 
    "B", "A", "B", "A", "B"), Month = c("Jan-03", "Jan-03", "Feb-03", 
    "Feb-03", "Mar-03", "Mar-03"), Value = 10:15), .Names = c("ID1", 
    "ID2", "Month", "Value"), class = "data.frame", row.names = c(NA, 
    -6L))
    

    【讨论】:

    • 谢谢!第二个正是我想要的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    相关资源
    最近更新 更多