【问题标题】:How to get R dataframe into long format如何将 R 数据帧转换为长格式
【发布时间】:2019-04-13 23:12:29
【问题描述】:

我有数据框:

   Santa.Period            Index          Mean     Variance
1          TRUE          S&P 500 -5.463827e-05 5.552660e-05
2          TRUE              Dow  6.907256e-05 4.798628e-05
3          TRUE NASDAQ Composite -3.683476e-04 7.296956e-05
4          TRUE         FTSE 100  1.922876e-03 6.342067e-05
5          TRUE           CAC 40  1.223700e-03 9.531649e-05
6          TRUE              DAX  1.719576e-04 9.986086e-05
7         FALSE          S&P 500  2.488153e-04 1.676608e-04
8         FALSE              Dow  2.570371e-04 1.415451e-04
9         FALSE NASDAQ Composite  3.989929e-04 1.898479e-04
10        FALSE         FTSE 100  4.931637e-05 1.534737e-04
11        FALSE           CAC 40 -3.337471e-05 2.280848e-04
12        FALSE              DAX  1.916821e-04 2.142012e-04

我想重新调整它,以便Santa.PeriodIndex 的每个组合有一列,两行给出每个组合的均值和方差。

我已经在 reshape 的 dcast 上折腾了好几个小时了,但一直没能到任何地方。

我该如何解决这个问题?

【问题讨论】:

    标签: r dataframe reshape tidyverse


    【解决方案1】:

    我认为不需要dcast。您可以只使用df 的转置,然后设置df 列名粘贴IndexSanta.Period。试试看:

    setNames(data.frame(t(df[, -c(1, 2)])),
             paste(df$Index, df$Santa.Period, sep = "_"))
    # output
              S&P 500_TRUE     Dow_TRUE NASDAQ Composite_TRUE FTSE 100_TRUE  CAC 40_TRUE     DAX_TRUE S&P 500_FALSE    Dow_FALSE NASDAQ Composite_FALSE FTSE 100_FALSE  CAC 40_FALSE    DAX_FALSE
    Mean     -5.463827e-05 6.907256e-05         -3.683476e-04  1.922876e-03 1.223700e-03 1.719576e-04  0.0002488153 0.0002570371           0.0003989929   4.931637e-05 -3.337471e-05 0.0001916821
    Variance  5.552660e-05 4.798628e-05          7.296956e-05  6.342067e-05 9.531649e-05 9.986086e-05  0.0001676608 0.0001415451           0.0001898479   1.534737e-04  2.280848e-04 0.0002142012
    

    数据

    df <- structure(list(Santa.Period = c(TRUE, TRUE, TRUE, TRUE, TRUE, 
    TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), Index = c("S&P 500", 
    "Dow", "NASDAQ Composite", "FTSE 100", "CAC 40", "DAX", "S&P 500", 
    "Dow", "NASDAQ Composite", "FTSE 100", "CAC 40", "DAX"), Mean = c(-5.463827e-05, 
    6.907256e-05, -0.0003683476, 0.001922876, 0.0012237, 0.0001719576, 
    0.0002488153, 0.0002570371, 0.0003989929, 4.931637e-05, -3.337471e-05, 
    0.0001916821), Variance = c(5.55266e-05, 4.798628e-05, 7.296956e-05, 
    6.342067e-05, 9.531649e-05, 9.986086e-05, 0.0001676608, 0.0001415451, 
    0.0001898479, 0.0001534737, 0.0002280848, 0.0002142012)), .Names = c("Santa.Period", 
    "Index", "Mean", "Variance"), class = "data.frame", row.names = c("1", 
    "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"))
    

    【讨论】:

    • 谢谢。非常感谢您的帮助。
    • 不客气@Henry。也欢迎来到SO!如果您想订购最终数据框 (df2),您可以使用 df2[, order(names(df2))]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多