如何转置数据框列表?

时间:2017-12-29 22:49:42

标签: r lapply transpose

我有一个包含51个数据帧的列表,我需要对它们进行转置,然后删除新数据帧的前两行。我试图使用lapply,但不熟悉语法。我的操作很容易在一个数据框上完成,但使用lapply作为数据框列表,是我遇到麻烦的地方。这就是我为列表中的一个元素到达我的最终数据框所做的 -

john<-t(dflist[["df7"]])
john <- john[-c(1,2), ] 

对于每个数据帧,按行号删除行将是正确的,因为它们在结构上是相同的。构建了执行上述操作的功能:

transposer <- function(df) {
  z<-t(df)
  df<-z[-c(1,2),]
}

如何在lapply中使用此功能?

求助:

soup<-lapply(gooble, transposer)

1 个答案:

答案 0 :(得分:3)

以下是使用lapply()的方法。

# generate some data frames
set.seed(102134)
id <- 1:5
aList <- lapply(id,function(x){
     data.frame(matrix(runif(50),nrow=10,ncol=5))
})
# transpose and remove first 2 rows
transposeList <- lapply(aList,function(x){
     t(x)[-c(1,2),]
})
# print first transposed data frame
transposeList[[1]]

..和输出,注意到我们打印的数据框中已经省略了原始数据框中表示变量X1X2的行:

> # print first transposed data frame
> transposeList[[1]]
        [,1]      [,2]      [,3]      [,4]      [,5]       [,6]       [,7]
X3 0.1128006 0.5884873 0.8532827 0.5957727 0.6995990 0.09765447 0.69149804
X4 0.1239681 0.7624771 0.9756067 0.1251610 0.4954070 0.92652298 0.04800376
X5 0.3698154 0.6789413 0.9660355 0.6613972 0.5099627 0.97766102 0.97139575
        [,8]       [,9]     [,10]
X3 0.7731442 0.03916568 0.8787288
X4 0.3829343 0.41939016 0.9668663
X5 0.8865407 0.63437436 0.6774895
> 

这个答案中一个重要的微妙之处是t(x)[-c(1,2),]内匿名函数中的代码行lapply()。由于t(x)的结果是一个对象,我们可以立即使用提取运算符的[形式删除前两行。