2016-11-11 17 views
-1
I have this list: 

dput(data) 

structure(list(open = structure(c(NA, 135.600006, 136.759995), .Dim = c(3L, 
1L), .Dimnames = list(structure(c("2016-01-01", "2016-01-04", 
"2016-01-05"), .Dim = c(3L, 1L)), "IBM")), high = structure(c(NA, 
135.970001, 136.889999), .Dim = c(3L, 1L), .Dimnames = list(structure(c("2016-01-01", 
"2016-01-04", "2016-01-05"), .Dim = c(3L, 1L)), "IBM")), low = structure(c(NA, 
134.240005, 134.850006), .Dim = c(3L, 1L), .Dimnames = list(structure(c("2016-01-01", 
"2016-01-04", "2016-01-05"), .Dim = c(3L, 1L)), "IBM")), close = structure(c(NA, 
135.949997, 135.850006), .Dim = c(3L, 1L), .Dimnames = list(structure(c("2016-01-01", 
"2016-01-04", "2016-01-05"), .Dim = c(3L, 1L)), "IBM")), volume = structure(c(NA, 
5229400L, 3924800L), .Dim = c(3L, 1L), .Dimnames = list(structure(c("2016-01-01", 
"2016-01-04", "2016-01-05"), .Dim = c(3L, 1L)), "IBM")), adj.close = structure(c(NA, 
130.959683, 130.863362), .Dim = c(3L, 1L), .Dimnames = list(structure(c("2016-01-01", 
"2016-01-04", "2016-01-05"), .Dim = c(3L, 1L)), "IBM"))), .Names = c("open", 
"high", "low", "close", "volume", "adj.close")) 

私はこのリストをデータフレームに変換しようとしていますので、さらに計算ができます。リストをデータフレームに変換するR

は、私はこのように見て、このデータフレームを必要とする:

Date Open High Low Close Volume 
1985-01-02 3.18 3.18 3.08 3.08 1870906 

私はこれを試してみました:

do.call(rbind, data) 

ないの列を見ることができますか?何か案は?

+2

:私は、各行列の行とCOL名を削除するas.numericを使用しますあなたはほぼそこに – bouncyball

+0

@bouncyball、私はカラムとして日付が必要です、あなたはそれをデータフレームに追加できますか? – user1471980

+0

@jenesaisquoiそれはそれが得られるほど良いです。 'setNames(data.frame(data)、names(data))'だけで名前を修正してください。 – alistaire

答えて

2

私は答えとして私のコメントを投稿します:

data2 <- setNames(do.call('cbind.data.frame', data), names(data)) 
data2$date <- row.names(data2) 
row.names(data2) <- NULL 
data2 <- cbind.data.frame(date = data2$date, data2[,-7]) 

     date open high low close volume adj.close 
1 2016-01-01  NA  NA  NA  NA  NA  NA 
2 2016-01-04 135.60 135.97 134.24 135.95 5229400 130.9597 
3 2016-01-05 136.76 136.89 134.85 135.85 3924800 130.8634 

は基本的に、我々は我々が望むものに近い取得するというよりも、rbindcbind.data.frameを使用しています。そこから再編成中data.frame

0

forループを使用してこのリストをマージすることができます。 `setNames(do.call( 'cbind.data.frame'、データ)、名前(データ))`取得

list.to.df <- structure(list(open = structure(c(NA, 135.600006, 136.759995), .Dim = c(3L, 
1L), .Dimnames = list(structure(c("2016-01-01", "2016-01-04", 
"2016-01-05"), .Dim = c(3L, 1L)), "IBM")), high = structure(c(NA, 
135.970001, 136.889999), .Dim = c(3L, 1L), .Dimnames = list(structure(c("2016-01-01", 
"2016-01-04", "2016-01-05"), .Dim = c(3L, 1L)), "IBM")), low = structure(c(NA, 
134.240005, 134.850006), .Dim = c(3L, 1L), .Dimnames = list(structure(c("2016-01-01", 
"2016-01-04", "2016-01-05"), .Dim = c(3L, 1L)), "IBM")), close = structure(c(NA, 
135.949997, 135.850006), .Dim = c(3L, 1L), .Dimnames = list(structure(c("2016-01-01", 
"2016-01-04", "2016-01-05"), .Dim = c(3L, 1L)), "IBM")), volume = structure(c(NA, 
5229400L, 3924800L), .Dim = c(3L, 1L), .Dimnames = list(structure(c("2016-01-01", 
"2016-01-04", "2016-01-05"), .Dim = c(3L, 1L)), "IBM")), adj.close = structure(c(NA, 
130.959683, 130.863362), .Dim = c(3L, 1L), .Dimnames = list(structure(c("2016-01-01", 
"2016-01-04", "2016-01-05"), .Dim = c(3L, 1L)), "IBM"))), .Names = c("open", 
"high", "low", "close", "volume", "adj.close")) 

names <- names(list.to.df) 

df <- data.frame(Date=as.Date(row.names(list.to.df[[1]]))) 

for(i in 1:length(list.to.df)){ 
    df[,i + 1] <- as.numeric(list.to.df[[i]]) 
    names(df)[i + 1] <- names[i] 
} 

     Date open high low close volume adj.close 
1 2016-01-01  NA  NA  NA  NA  NA  NA 
2 2016-01-04 135.60 135.97 134.24 135.95 5229400 130.9597 
3 2016-01-05 136.76 136.89 134.85 135.85 3924800 130.8634 
関連する問題