简体   繁体   English

R-将数据“列表”合并到一个data.frame中

[英]R - Merge data “list” into one data.frame

When I use the list function: 当我使用列表功能时:

el_nino_1974_2000_all <- list()
for (k in seq_along(el_nino_start_month)){
     el_nino_1974_2000_all[[k]] = window(Nino3.4_Flow_1974_2000_zoo,
                                         start = (as.Date(el_nino_1974_2000[k,]$el_nino_start_mont)),
                                         end = (as.Date(el_nino_1974_2000[k,]$el_nino_finish_month)))
}

A gives a series of separate data subsets staring from i = 1 . A给出了一系列从i = 1的独立数据子集。 However, I want to merge all subsets into one frame of data either in zoo format or data frame format. 但是,我想将所有子集以Zoo格式或数据帧格式合并到一帧数据中。

This is the structure of el_nino_1974_2000_all . 这是el_nino_1974_2000_all的结构。

    > str(el_nino_1974_2000_all)
List of 7
 $ :‘zoo’ series from 1976-08-15 to 1977-01-15
  Data: num [1:6, 1:2] 0.519 0.874 0.886 0.823 0.734 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr [1:2] "Nino3.4_degree_1974_2000" "Houlgrave_flow_1974_2000"
  Index:  Date[1:6], format: "1976-08-15" "1976-09-15" ...
 $ :‘zoo’ series from 1982-05-15 to 1983-06-15
  Data: num [1:14, 1:2] 0.961 1.388 0.959 1.171 1.564 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr [1:2] "Nino3.4_degree_1974_2000" "Houlgrave_flow_1974_2000"
  Index:  Date[1:14], format: "1982-05-15" "1982-06-15" ...
 $ :‘zoo’ series from 1986-09-15 to 1988-01-15
  Data: num [1:17, 1:2] 0.974 1.089 1.322 1.273 1.313 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr [1:2] "Nino3.4_degree_1974_2000" "Houlgrave_flow_1974_2000"
  Index:  Date[1:17], format: "1986-09-15" "1986-10-15" ...
 $ :‘zoo’ series from 1991-05-15 to 1992-07-15
  Data: num [1:15, 1:2] 0.68 1 0.923 0.773 0.68 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr [1:2] "Nino3.4_degree_1974_2000" "Houlgrave_flow_1974_2000"
  Index:  Date[1:15], format: "1991-05-15" "1991-06-15" ...
 $ :‘zoo’ series from 1993-02-15 to 1993-07-15
  Data: num [1:6, 1:2] 0.54 0.641 1.01 1.144 0.917 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr [1:2] "Nino3.4_degree_1974_2000" "Houlgrave_flow_1974_2000"
  Index:  Date[1:6], format: "1993-02-15" "1993-03-15" ...
 $ :‘zoo’ series from 1994-08-15 to 1995-02-15
  Data: num [1:7, 1:2] 0.662 0.746 1.039 1.329 1.301 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr [1:2] "Nino3.4_degree_1974_2000" "Houlgrave_flow_1974_2000"
  Index:  Date[1:7], format: "1994-08-15" "1994-09-15" ...
 $ :‘zoo’ series from 1997-04-15 to 1998-05-15
  Data: num [1:14, 1:2] 0.601 1.136 1.461 1.668 2.079 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr [1:2] "Nino3.4_degree_1974_2000" "Houlgrave_flow_1974_2000"
  Index:  Date[1:14], format: "1997-04-15" "1997-05-15" ...
> 

Sorry, I don't know how to do the formatting. 抱歉,我不知道如何进行格式化。

If the dates don't overlap, you can stick these together using rbind (since the number of columns is the same for each component). 如果日期不重叠,则可以使用rbind它们组合在一起(因为每个组件的列数相同)。 Try: 尝试:

el_nino_1974_2000_all <- c()
for (k in seq_along(el_nino_start_month)){
    el_nino_1974_2000_all <- rbind(el_nino_1974_2000_all,window(...))
}

Instead of the list construction you originally had. 而不是原来的list构造。 This will return a zoo object. 这将返回一个zoo对象。

If you want to return a data.frame , try using rbind , but with data.frame to convert your objects (this will work even if date indices overlap between each of your datasets): 如果要返回data.frame ,请尝试使用rbind ,但要使用data.frame转换对象(即使每个数据集之间的日期索引重叠也可以):

el_nino_1974_2000_all <- data.frame()
for (k in seq_along(el_nino_start_month)){
    el_nino_1974_2000_all <- rbind(el_nino_1974_2000_all,data.frame(window(...)))
}

Have you tried this function : 您是否尝试过此功能:

http://rss.acs.unt.edu/Rdoc/library/gtools/html/smartbind.html http://rss.acs.unt.edu/Rdoc/library/gtools/html/smartbind.html

out <- smartbind(list_of_dataframes)

Note : list_of_dataframes should contain data.frames but you can just transform you're data to dframes on the fly and then use this function. 注意:list_of_dataframes应该包含data.frames,但是您可以将数据实时转换为dframe,然后使用此功能。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM