R-使用数据框列表中的列表

时间:2018-06-30 00:39:53

标签: r list nested-lists

我有两个数据帧/home/test1的列表。每个数据帧包含三列df1 and df2。嵌套在val1 val2 and bb中的是另一个包含4列的2列表-请参见下面的bb

当我使用tail(my.list$df1, n=3)导出时,所有列都出现在write.csv文件中,并且输出看起来与.csv完全一样。但是,由于缺乏更好的用语,我想将tail(my.list$df1, n=3)列上移一层,以便能够调用,操纵和/或合并bb.dn bb.mavg bb.up bb.pctB列与其他数据帧或在我的代码中列出。

可复制:

bb.dn bb.mavg bb.up bb.pctB

这是library(TTR) library(tidyverse) library(plyr) # reproducible example set.seed(1363) d1 <- data.frame(val1 = c(rnorm(n=65, mean=15)), val2 = c(rnorm(n=65, mean=15))) d2 <- data.frame(val1 = c(rnorm(n=35, mean=12)), val2 = c(rnorm(n=35, mean=25))) my.list <- list(df1 = d1, df2 = d2) for (i in seq_along(my.list)) { my.list[[i]] <- my.list[[i]] %>% mutate(bb = BBands(val2, n = 20, sd = 2)) } 中数据帧2的结构:

my.list

这是“ 2的列表”中的列表,其中包含我要向上移动一级的4列:

> str(my.list$df2)
'data.frame':   35 obs. of  3 variables:
$ val1: num  11.1 11.4 10.9 13.9 12.6 ...
$ val2: num  25.1 25.7 24.6 25.2 26 ...
$ bb  : num [1:35, 1:4] NA NA NA NA NA NA NA NA NA NA ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr  "dn" "mavg" "up" "pctB"

2 个答案:

答案 0 :(得分:2)

我们可以使用map中的purrr

library(purrr)
map(my.list, as.data.frame.list) 

数据

set.seed(1363)
d1 <- data.frame(val1 = c(rnorm(n=65, mean=15)), 
            val2 = c(rnorm(n=65, mean=15)))

d2 <- data.frame(val1 = c(rnorm(n=35, mean=12)), 
             val2 = c(rnorm(n=35, mean=25)))
my.list <- list(df1 = d1, df2 = d2) 
for(i in seq_along(my.list)) my.list[[i]][["bb"]] <- 
                              BBands(my.list[[i]]$val2, n=20, sd = 2)

答案 1 :(得分:1)

您正在寻找:

 setNames(Map(do.call,c(data.frame),my.list),names(my.list))