繁体   English   中英

如何使用lapply按行号范围对列表中的数据帧进行子集化?

[英]How to subset data frames in a list by row number range with lapply?

我有一个数据框列表。 我想提取每个数据帧的前248行,然后将它们绑定到一个单独的数据帧中。

allData是数据帧列表。 我试图使用lapplysubset但我不知道如何在那里引用行号。 看来子subset函数的“子集”参数只接受逻辑向量。

temp <- lapply(allData, subset, subset = (row.names(allData) <= 248))

这段代码是我的想法,它不起作用,因为row.names(allData)实际上只适用于列表本身,而不是数据帧。 那么如何引用每个数据帧的行号呢?

使用base R,我们可以做到

do.call(rbind, lapply(allData, function(x) x[1:248, ]))

或与purrr

purrr::map_dfr(allData, ~.[1:248, ])

使用可重复的示例与mtcars数据和前5行的子集。

allData <- list(mtcars, mtcars)
do.call(rbind, lapply(allData, function(x) x[1:5, ]))

#                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
#Mazda RX4          21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
#Mazda RX4 Wag      21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
#Datsun 710         22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
#Hornet 4 Drive     21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
#Hornet Sportabout  18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
#Mazda RX41         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
#Mazda RX4 Wag1     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
#Datsun 7101        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
#Hornet 4 Drive1    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
#Hornet Sportabout1 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2

另一种tidyverse方法:

library(tidyverse)

allData %>% 
  map_df(function(x) x %>% slice(1:10))

由于OP没有提供样本数据,我们可以使用iris数据集:

allData <- list(iris1 = iris[1:50,], # create a list with iris
                iris2 = iris[51:100,], 
                iris3 = iris[101:150,])

allData %>% 
  map_df(~.[1:10,])

## (first 10 rows)
#  Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
#1           5.1         3.5          1.4         0.2     setosa
#2           4.9         3.0          1.4         0.2     setosa
#3           4.7         3.2          1.3         0.2     setosa
#4           4.6         3.1          1.5         0.2     setosa
#5           5.0         3.6          1.4         0.2     setosa
#6           5.4         3.9          1.7         0.4     setosa
#7           4.6         3.4          1.4         0.3     setosa
#8           5.0         3.4          1.5         0.2     setosa
#9           4.4         2.9          1.4         0.2     setosa
#10          4.9         3.1          1.5         0.1     setosa

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM