如何按行数显示某些列表元素

时间:2019-03-06 08:29:01

标签: r

我有一个包含3000个元素的列表。每个元素有18列和不同数量的行。我只想查看具有超过50行的列表元素,因此我尝试用lapply编写代码。

对于我尝试过的单个数据框

test <- data_frame[1:nrow(data_frame) > 50, ]

成功了。所以我试图用lapply将这段代码实现为一个函数:

test <- lapply(data_list, function(x) x[1:nrow(x) > 50, ])

但是我收到错误消息:“ 1:nrow(x)中的错误:长度为0的参数”。

你知道我做错了吗?非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我认为lapply()不起作用的原因是因为nrow()被应用于列表,而它却需要应用于数据帧/小标题。我试图重复您的情况,那里有一个错误的解决方案。

这里有一个具有不同行数的数据帧列表-map()对列表中的每个元素应用函数nrow(),然后对返回的nrow结果进行测试>50标准-返回要针对原始列表建立索引的逻辑向量。此解决方案对您的问题有用吗?

df_1 <- data.frame(matrix(1:3600, nrow = 200, ncol = 18))
df_2 <- data.frame(matrix(1:2700, nrow = 150, ncol = 18))
df_3 <- data.frame(matrix(1:900, nrow = 50, ncol = 18))

your_list <- list(df_1,df_2,df_3)

your_list[purrr::map(your_list,nrow) > 50]

答案 1 :(得分:0)

sapply(rr, nrow) > 5产生一个逻辑矢量(FALSE, FALSE, FALSE, TRUE, ...,用于指定rr中的哪些元素具有多于五行。然后可以使用该矢量从列表中提取位元素。

set.seed(1)
rr <- replicate(6, 
  as.data.frame(matrix(1:(sample(2:6, 1)*2), ncol=2)),
  simplify=FALSE)

# Find and extract the dataframes with more than 5 rows
rr[sapply(rr, nrow) > 5]