2015-08-21 36 views
1

我有以下列表命名test,我想變成一個data.frame()清單data.frame()與NA填補R中的空字段

test <- structure(list(Feb.19.2016 = structure(list(calls = structure(list(
    Strike = c(2.5, 5, 7.5), Last = c(0.5, 0.31, 0.45), Chg = c(-0.1, 
                   0, 0), Bid = c(0.5, 0.1, 0), Ask = c(0.75, 0.35, 0.4), Vol = c(2L, 
                                   5L, 6L), OI = c(273L, 38L, 12L)), .Names = c("Strike", "Last", 
                                              "Chg", "Bid", "Ask", "Vol", "OI"), row.names = c("ATNM160219C00002500", 
                                                          "ATNM160219C00005000", "ATNM160219C00007500"), class = "data.frame"), 
    puts = structure(list(Strike = c(2.5, 5), Last = c(0.95, 
                 3), Chg = c(-0.15, 0), Bid = c(0.75, 2.75), Ask = c(1.1, 
                              3.5), Vol = c(20L, 10L), OI = c(48L, 26L)), .Names = c("Strike", 
                                            "Last", "Chg", "Bid", "Ask", "Vol", "OI"), row.names = c("ATNM160219P00002500", 
                                                          "ATNM160219P00005000"), class = "data.frame")), .Names = c("calls", 
                                                                         "puts"))), .Names = "Feb.19.2016") 

當我嘗試將其轉換爲data.framedf <- as.data.frame(test)我得到以下錯誤:

Error in data.frame(calls = list(Strike = c(2.5, 5, 7.5), Last = c(0.5, : arguments imply differing number of rows: 3, 2

我想談談我的列表(test)爲data.frame(),讓任何缺少的字段是NA:

所需的輸出:

     Strike Last Chg Bid Ask Vol OI Strike Last Chg Bid Ask Vol OI 
ATNM160219C00002500 2.5 0.50 -0.1 0.5 0.75 2 273 2.5 0.95 -0.15 0.75 1.1 20 48 
ATNM160219C00005000 5.0 0.31 0.0 0.1 0.35 5 38 5.0 3.00 0.00 2.75 3.5 10 26 
ATNM160219C00007500 7.5 0.45 0.0 0.0 0.40 6 12 NA NA  NA NA NA NA NA 
+0

嘗試像'plyr :: rbind.fill化(Reduce(不公開,測試))'。雖然提供的數據集不包含任何缺少的值。 –

+4

您有兩次相同的列,但沒有指出您的工具是看跌期權還是看漲期權?這是一個非常糟糕的方法來表示你的數據... –

+0

它是一個重複如果你想結合data.frames每列與不同的行數... http://stackoverflow.com/questions/6988184/combining-two-不同長度的數據幀 –

回答

1

你可以這樣做:

do.call(rbind, lapply(names(test[[1]]), function(u) transform(test[[1]][[u]], type=u)))