根据列中的第一个值筛选数据帧列表

  • 本文关键字:筛选 数据帧 列表 第一个 r
  • 更新时间 :
  • 英文 :


我有一些数据,例如:

dat1 <- data.frame(a = c("5","10","15","20"), b = c("0.1","0.2","0.3","0.4"))
dat2 <- data.frame(a = c("15","20","25","30"), b = c("0.5","0.6","0.7","0.8"))
datalist <-list (dat1,dat2)

给我一个类似的格式

[[1]]
a   b
1  5 0.1
2 10 0.2
3 15 0.3
4 20 0.4
[[2]]
a   b
1 15 0.5
2 20 0.6
3 25 0.7
4 30 0.8

我希望能够过滤数据帧列表,条件是列a的第一个值应该是<= 10。因此,在这种情况下,输出将只是第一个数据帧[[1],而第二个数据帧将被完全忽略。

所需输出

[[1]]
a   b
1  5 0.1
2 10 0.2
3 15 0.3
4 20 0.4

如有任何建议,我们将不胜感激!感谢

您可以使用sapply来获取一个逻辑向量,该向量指示列表中的每个元素是否满足特定条件。然后,可以用[以通常的方式将其应用于列表的子集。例如:

datalist[sapply(datalist, function(x){as.numeric(x[[1,"a"]]) <= 10})]

将只返回示例中的第一个元素。

(请注意,as.numeric是必要的,因为您的数字在此处存储为字符串(

我们还可以使用purrr中的keep函数。它接受一个谓词函数.p,并将其应用于列表的每个元素,并返回谓词函数等于单个TRUE的元素。

lirbary(purrr)
datalist %>%
keep(~ .x[["a"]][1] %>% as.numeric() <= 10)
[[1]]
a   b
1  5 0.1
2 10 0.2
3 15 0.3
4 20 0.4

我们可以使用base R中的Filter

Filter((x) as.numeric(x$a[1]) <= 10, datalist)
[[1]]
a   b
1  5 0.1
2 10 0.2
3 15 0.3
4 20 0.4

最新更新