首页 文章

如何将List转换为数据框,但删除内部List结构?

提问于
浏览
0

这听起来很简单,但我在尝试将List转换为数据框时遇到了很多问题 . 我使用 as.data.frame 函数完成它并且它可以工作,但是当我使用 str 函数时,内部结构仍然保留 List 结构 . 我想选择一个特定的列来使用它 .

有一些简单的方法可以将List转换为数据框,但是有一个新的数据框结构?我已尝试将我的List列入矩阵但我丢失了colnames和rownames,我必须再次手动放入它 .

例如,那是我的 List ,我想使用并绘制 mystats$p.value 列:

library(gtools)
 x <- rnorm(100, sd=1)
 y <- rnorm(100, sd =2)

mystats <- t(running(x, y, fun = cor.test, width=5, by=5))

谢谢

1 回答

  • 1

    当且仅当它是 data.frame 的列表时,您可以使用do.call

    al <- split(airquality, airquality$Month)
    sapply(al, class)
    same.airquality <- do.call(rbind, al)
    

    这里列表元素具有相同的列结构(对于列表中的列表元素"splits"不同的变量,每个都相同 nrow ),你可以使用

    do.call(cbind, another.list)
    

    最后(但没有经过测试)用这种方法你 could 试试包 abind

    EDIT

    在提供的示例之后,我了解了更多你的设置:你应该稍微清理 cor.test 的调用,因为 running 它稍微混淆数据(目前你试图将一个列表,一个复杂的数据结构放在像对象这样的矩阵中)

    foobar <- function(x,y) {
        my.test <- cor.test(x,y)
    
        ## look at values returned by names(cor.test) or ?cor.test for
        ## which object you can export                                      
    
        c(my.test$statistic, my.test$p.value, my.test$conf.int)
    
    }
    
    ## mystats is a matrix                                                          
    mystats <- as.data.frame(t(running(x, y, fun = foobar, width=5, by=5)))
    names(mystats) <- c("statistic", "p.value", "low.ci", "up.ci")
    mystats$p.value
    

    如果您有多个这样的对象,例如

    mystats$row <- row.names(mystats)
    mystats$rep <- 1
    row.names(mystats) <- NULL                                          
    mystats2 <- mystats
    mystats2$rep <- 2
    asd <- list(mystats, mystats2)
    foo <- do.call("rbind", asd )
    foo
    foo$p.value
    

    HTH

相关问题