geo*_*ant 6 r lapply dataframe
我正在清理R中的几个excel文件.不幸的是,它们具有不等的尺寸,行和列.目前,我将每个Excel工作表存储为列表中的数据框.我知道如何通过发出以下命令打印列表中第一个数据帧的第4行:
df.list1[[1]][4,]
Run Code Online (Sandbox Code Playgroud)
或者像这样的一系列行:
df.list1[[1]][1:10,]
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何为列表中的每个数据框打印特定行?换一种说法:
df.list1[[i]][4,]
Run Code Online (Sandbox Code Playgroud)
df.list1
其中有30个数据框,但我的其他df.lists
数据框超过140个,我希望提取它们的行.我希望能够将多个数据框中的特定位置存储到新列表中.我认为解决方案可能涉及lapply
.
此外,有没有办法根据条件提取列表中每个数据框中的行?例如,对于列表df.list1中的所有30个数据帧,如果值等于"Apartment"或其他一些字符串,则提取行.
感谢您的帮助,如果我能帮助澄清我的问题,请告诉我.
the*_*ail 15
你也可以直接lapply
提取函数@Justin建议,例如:
# example data of a list containing 10 data frames:
test <- replicate(10,data.frame(a=1:10),simplify=FALSE)
# extract the fourth row of each one - setting drop=FALSE means you get a
# data frame returned even if only one vector/column needs to be returned.
lapply(test,"[",4,,drop=FALSE)
Run Code Online (Sandbox Code Playgroud)
格式为:
lapply(listname,"[",rows.to.return,cols.to.return,drop=FALSE)
# the example returns the fourth row only from each data frame
#[[1]]
# a
#4 4
#
#[[2]]
# a
#4 4
# etc...
Run Code Online (Sandbox Code Playgroud)
为了推广这个,当你完成了基于条件的提取,你必须一点点改变它的东西,如下面的例子中提取所有行a
中的每个data.frame
是>4
.在这种情况下,使用匿名函数可能是最清晰的方法,例如:
lapply(test, function(x) with(x,x[a>4,,drop=FALSE]) )
#[[1]]
# a
#5 5
#6 6
#7 7
#8 8
#9 9
#10 10
# etc...
Run Code Online (Sandbox Code Playgroud)
不需要包装器函数,只需在末尾使用lapply
并传递一个空白参数(表示列)
lapply(df.list, `[`, 4, )
Run Code Online (Sandbox Code Playgroud)
这也适用于您通常用于的任何类型的行参数,myDF[ . , ]
例如:lapply(df.list,
[, c(2, 4:6), )
.
我建议如果你打算使用包装函数,让它更像[
是这样的工作:例如
Grab(df.list, 2:3, 1:5)
将选择每个data.frame的第二行和第三行以及第一列到第五列,并
Grab (df.list, 2:3)
选择所有列的第二行和第三行
Grab <- function(ll, rows, cols) {
if (missing(cols))
lapply(ll, `[`, rows, )
else
lapply(ll, `[`, rows, cols)
}
Grab (df.list, 2:3)
Run Code Online (Sandbox Code Playgroud)