我有一个包含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)
答案 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]]
..和输出,注意到我们打印的数据框中已经省略了原始数据框中表示变量X1
和X2
的行:
> # 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)
的结果是一个对象,我们可以立即使用提取运算符的[
形式删除前两行。