我有一个包含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的参数”。
你知道我做错了吗?非常感谢您的帮助。
答案 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]