听起来很简单,但我在尝试将List转换为数据框时遇到了很多问题。 我用 as.data.frame 函数做了它,但是当我使用 str 函数时,内部结构仍然保留在列表结构。我想选择一个特定的专栏来处理它。
有一些简单的方法可以将List转换为数据框,但是有一个新的数据框架结构? 我已尝试将我的List列入矩阵,但我丢失了colnames和rownames,我必须再次手动放入。
例如,这是我的列表,我想使用并绘制 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))
由于
答案 0 :(得分:1)
当且仅当它是data.frame
的列表时,您可以使用do.call
al <- split(airquality, airquality$Month)
sapply(al, class)
same.airquality <- do.call(rbind, al)
这里列表元素具有相同的列结构(对于列表&#34;拆分&#34;列表元素中的不同变量,每个都是相同的nrow
),你可以使用
do.call(cbind, another.list)
最后(但未经测试)使用此方法could
尝试包abind
修改强>
在提供的示例后,我了解了您的设置:您应该稍微清理一下对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