将数据帧列表('long format')转换为更整洁的表以进行输出?

时间:2017-03-05 02:55:58

标签: r

我有以下列表,它是从已定义的函数返回的:

$JPY
      dev20     dev50    RSI Alert.dates
1 0.1540239 0.7701194 25.071  2017-02-23

$CHF
        dev20     dev50      RSI Alert.dates
1 -0.03279405 0.6012243 29.78284  2017-02-23

我想把它转换成一个表格,以便:

Currency Dates       % Deviation 20MA   % Deviation 50MA     RSI
JPY      2017-02-23      -0.6968559       0.3526983        44.68176 
CHF      2017-02-15       0.1920461       1.027927         52.27664

我想到可能没有上市,但那又回来了:

 JPY.dev20       JPY.dev50         JPY.RSI JPY.Alert.dates       CHF.dev20       CHF.dev50         CHF.RSI 
   1.540239e-01    7.701194e-01    2.507100e+01    1.487830e+09   -3.279405e-02    6.012243e-01    2.978284e+01 

我不知道它从哪里拉出这些值。非常感谢帮助!

附件是一个示例输入:

structure(list(JPY = structure(list(dev20 = 0.15402387370042, 
    dev50 = 0.770119368502115, RSI = 25.0710018074629, Alert.dates = structure(1487829600, class = c("POSIXct", 
    "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", "RSI", 
"Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    CHF = structure(list(dev20 = -0.032794053345002, dev50 = 0.601224311324886, 
        RSI = 29.782838407164, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    CAD = structure(list(dev20 = 0.0368154624942435, dev50 = -0.589047399907958, 
        RSI = 36.8185395021506, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    SEK = structure(list(dev20 = -0.31944744226203, dev50 = 1.09935966616304, 
        RSI = 28.7420749197979, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    NOK = structure(list(dev20 = 0.0145621642612077, dev50 = -22.9434988026665, 
        RSI = 26.916564089549, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    HUF = structure(list(dev20 = -0.869198312236288, dev50 = 1.47257383966245, 
        RSI = 35.1942413992149, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    ILS = structure(list(dev20 = 0.535966149506351, dev50 = 1.70944992947814, 
        RSI = 31.1021889147085, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    PLN = structure(list(dev20 = -0.644026263705185, dev50 = 1.76243284848103, 
        RSI = 32.1167113843954, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    RUB = structure(list(dev20 = -0.0708237545157256, dev50 = 1.65778989904759, 
        RSI = 28.8003054628427, Alert.dates = structure(1487743200, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    TRY = structure(list(dev20 = -0.190343546889518, dev50 = -0.0835654596100187, 
        RSI = 30.9120856971577, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    ZAR = structure(list(dev20 = -0.35993931913049, dev50 = -0.0951672021784934, 
        RSI = 29.3075076243689, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    BRL = structure(list(dev20 = 0.309500313985822, dev50 = 0.0717681887503484, 
        RSI = 36.268340221486, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    CLP = structure(list(dev20 = -0.899000911511854, dev50 = 1.98566602920413, 
        RSI = 33.7186834724809, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    COP = structure(list(dev20 = -0.0964268495205418, dev50 = 0.0380350350886611, 
        RSI = 39.2685326515606, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    MXN = structure(list(dev20 = -0.00917122680443107, dev50 = -0.46314695362417, 
        RSI = 37.822734568689, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    PEN = structure(list(dev20 = -0.0789294299142452, dev50 = 0.175797366627191, 
        RSI = 31.0501340963476, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    INR = structure(list(dev20 = -1.28960637261133, dev50 = -1663.43222744799, 
        RSI = 1.36263452994899, Alert.dates = structure(1487743200, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame")), .Names = c("JPY", 
"CHF", "CAD", "SEK", "NOK", "HUF", "ILS", "PLN", "RUB", "TRY", 
"ZAR", "BRL", "CLP", "COP", "MXN", "PEN", "INR"))
structure(list(JPY = structure(list(dev20 = 0.15402387370042, 
    dev50 = 0.770119368502115, RSI = 25.0710018074629, Alert.dates = structure(1487829600, class = c("POSIXct", 
    "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", "RSI", 
"Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    CHF = structure(list(dev20 = -0.032794053345002, dev50 = 0.601224311324886, 
        RSI = 29.782838407164, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    CAD = structure(list(dev20 = 0.0368154624942435, dev50 = -0.589047399907958, 
        RSI = 36.8185395021506, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    SEK = structure(list(dev20 = -0.31944744226203, dev50 = 1.09935966616304, 
        RSI = 28.7420749197979, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    NOK = structure(list(dev20 = 0.0145621642612077, dev50 = -22.9434988026665, 
        RSI = 26.916564089549, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    HUF = structure(list(dev20 = -0.869198312236288, dev50 = 1.47257383966245, 
        RSI = 35.1942413992149, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    ILS = structure(list(dev20 = 0.535966149506351, dev50 = 1.70944992947814, 
        RSI = 31.1021889147085, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    PLN = structure(list(dev20 = -0.644026263705185, dev50 = 1.76243284848103, 
        RSI = 32.1167113843954, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    RUB = structure(list(dev20 = -0.0708237545157256, dev50 = 1.65778989904759, 
        RSI = 28.8003054628427, Alert.dates = structure(1487743200, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    TRY = structure(list(dev20 = -0.190343546889518, dev50 = -0.0835654596100187, 
        RSI = 30.9120856971577, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    ZAR = structure(list(dev20 = -0.35993931913049, dev50 = -0.0951672021784934, 
        RSI = 29.3075076243689, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    BRL = structure(list(dev20 = 0.309500313985822, dev50 = 0.0717681887503484, 
        RSI = 36.268340221486, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    CLP = structure(list(dev20 = -0.899000911511854, dev50 = 1.98566602920413, 
        RSI = 33.7186834724809, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    COP = structure(list(dev20 = -0.0964268495205418, dev50 = 0.0380350350886611, 
        RSI = 39.2685326515606, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    MXN = structure(list(dev20 = -0.00917122680443107, dev50 = -0.46314695362417, 
        RSI = 37.822734568689, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    PEN = structure(list(dev20 = -0.0789294299142452, dev50 = 0.175797366627191, 
        RSI = 31.0501340963476, Alert.dates = structure(1487829600, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame"), 
    INR = structure(list(dev20 = -1.28960637261133, dev50 = -1663.43222744799, 
        RSI = 1.36263452994899, Alert.dates = structure(1487743200, class = c("POSIXct", 
        "POSIXt"), tzone = "")), .Names = c("dev20", "dev50", 
    "RSI", "Alert.dates"), row.names = c(NA, -1L), class = "data.frame")), .Names = c("JPY", 
"CHF", "CAD", "SEK", "NOK", "HUF", "ILS", "PLN", "RUB", "TRY", 
"ZAR", "BRL", "CLP", "COP", "MXN", "PEN", "INR"))

2 个答案:

答案 0 :(得分:1)

选项1 :使用bind_rows中的dplyr,其中df是您的数据框列表。

library(dplyr)
bind_rows(df, .id="Currency")
#   Currency        dev20         dev50       RSI         Alert.dates
# 1       JPY  0.154023874  7.701194e-01 25.071002 2017-02-23 11:30:00
# 2       CHF -0.032794053  6.012243e-01 29.782838 2017-02-23 11:30:00
# 3       CAD  0.036815462 -5.890474e-01 36.818540 2017-02-23 11:30:00
# 4       SEK -0.319447442  1.099360e+00 28.742075 2017-02-23 11:30:00
# 5       NOK  0.014562164 -2.294350e+01 26.916564 2017-02-23 11:30:00
# 6       HUF -0.869198312  1.472574e+00 35.194241 2017-02-23 11:30:00
# 7       ILS  0.535966150  1.709450e+00 31.102189 2017-02-23 11:30:00
# 8       PLN -0.644026264  1.762433e+00 32.116711 2017-02-23 11:30:00
# 9       RUB -0.070823755  1.657790e+00 28.800305 2017-02-22 11:30:00
# 10      TRY -0.190343547 -8.356546e-02 30.912086 2017-02-23 11:30:00
# 11      ZAR -0.359939319 -9.516720e-02 29.307508 2017-02-23 11:30:00
# 12      BRL  0.309500314  7.176819e-02 36.268340 2017-02-23 11:30:00
# 13      CLP -0.899000912  1.985666e+00 33.718683 2017-02-23 11:30:00
# 14      COP -0.096426850  3.803504e-02 39.268533 2017-02-23 11:30:00
# 15      MXN -0.009171227 -4.631470e-01 37.822735 2017-02-23 11:30:00
# 16      PEN -0.078929430  1.757974e-01 31.050134 2017-02-23 11:30:00
# 17      INR -1.289606373 -1.663432e+03  1.362635 2017-02-22 11:30:00

选项2 :使用rbindlist

中的data.table
library(data.table)
rbindlist(df, idcol="Currency")
#   Currency        dev20         dev50       RSI         Alert.dates
# 1:      JPY  0.154023874  7.701194e-01 25.071002 2017-02-23 11:30:00
# 2:      CHF -0.032794053  6.012243e-01 29.782838 2017-02-23 11:30:00
# 3:      CAD  0.036815462 -5.890474e-01 36.818540 2017-02-23 11:30:00
# 4:      SEK -0.319447442  1.099360e+00 28.742075 2017-02-23 11:30:00
# 5:      NOK  0.014562164 -2.294350e+01 26.916564 2017-02-23 11:30:00
# 6:      HUF -0.869198312  1.472574e+00 35.194241 2017-02-23 11:30:00
# 7:      ILS  0.535966150  1.709450e+00 31.102189 2017-02-23 11:30:00
# 8:      PLN -0.644026264  1.762433e+00 32.116711 2017-02-23 11:30:00
# 9:      RUB -0.070823755  1.657790e+00 28.800305 2017-02-22 11:30:00
# 10:      TRY -0.190343547 -8.356546e-02 30.912086 2017-02-23 11:30:00
# 11:      ZAR -0.359939319 -9.516720e-02 29.307508 2017-02-23 11:30:00
# 12:      BRL  0.309500314  7.176819e-02 36.268340 2017-02-23 11:30:00
# 13:      CLP -0.899000912  1.985666e+00 33.718683 2017-02-23 11:30:00
# 14:      COP -0.096426850  3.803504e-02 39.268533 2017-02-23 11:30:00
# 15:      MXN -0.009171227 -4.631470e-01 37.822735 2017-02-23 11:30:00
# 16:      PEN -0.078929430  1.757974e-01 31.050134 2017-02-23 11:30:00
# 17:      INR -1.289606373 -1.663432e+03  1.362635 2017-02-22 11:30:00

答案 1 :(得分:0)

我们可以使用Map创建“货币”列,然后rbind

do.call(rbind, Map(cbind, list_df, Currency = names(list_df)))