如何在data.frames列表上索引(子集)
我得到了几个data.frames的列表,我想从每个data.frames中删除前两列。我是这样做的,但我觉得这可能更像R-ish如何在data.frames列表上索引(子集),r,list,dataframe,lapply,R,List,Dataframe,Lapply,我得到了几个data.frames的列表,我想从每个data.frames中删除前两列。我是这样做的,但我觉得这可能更像R-ish data(mtcars) data(iris) myList <- list(A = mtcars, B = iris) # helper function removeCols <- function(df,vec) { res <- df[,-vec] } lapply(myList,removeCols,1:2) 数据(mtcars) 数据
data(mtcars)
data(iris)
myList <- list(A = mtcars, B = iris)
# helper function
removeCols <- function(df,vec) {
res <- df[,-vec]
}
lapply(myList,removeCols,1:2)
数据(mtcars)
数据(iris)
myList目前我唯一能想到的是将它变短并去掉helper函数
data(mtcars)
data(iris)
myList <- list(A = mtcars, B = iris)
lapply(myList,function(x) x[,-(1:2)])
但是,由于列表是一个非常开放的结构,对其内容没有任何要求,所以不能对其内容进行索引,因为它们可能真的不同。但是,如果两个数据集具有相同的维度(nxm),则可以将它们组合到一个3d数组中,所有已知的索引技巧都可以在该数组中工作。您的代码非常好。但您有两个可选选项:
使用匿名函数-这是一个通用的解决方案
使用本例特有的[
运算符
您的原件:
xx <- lapply(myList,removeCols,1:2)
这些结果相同
identical(xx, yy)
[1] TRUE
identical(xx, zz)
[1] TRUE
+1,谢谢Andrie,你的第二个选项就是我要找的。我以前试过“[[[”
”的时候,实际上已经很接近了。@hans0l0我很高兴能帮上忙。请记住[[
只返回一个元素。所以它有它的位置,但在这种情况下不是这样的!
yy <- lapply(myList, function(df, vec){df[,-vec]}, 1:2)
zz <- lapply(myList, "[", -(1:2))
identical(xx, yy)
[1] TRUE
identical(xx, zz)
[1] TRUE