gpt4 book ai didi

r - 过滤匹配向量所有值的数据框

转载 作者:行者123 更新时间:2023-12-04 07:32:50 25 4
gpt4 key购买 nike

我想过滤数据框 x通过包括 ID s 包含 Hour 的行匹配全部 testVector 的值.

ID <- c('A','A','A','A','A','B','B','B','B','C','C')
Hour <- c('0','2','5','6','9','0','2','5','6','0','2')

x <- data.frame(ID, Hour)
x
ID Hour
1 A 0
2 A 2
3 A 5
4 A 6
5 A 9
6 B 0
7 B 2
8 B 5
9 B 6
10 C 0
11 C 2

testVector <- c('0','2','5')

该解决方案应产生以下数据框:
x
ID Hour
1 A 0
2 A 2
3 A 5
4 A 6
5 A 9
6 B 0
7 B 2
8 B 5
9 B 6
ID 的所有值C 被删除,因为它丢失了 Hour 5. 请注意,我想保留 Hour 的所有值为 ID s 匹配 testVector .

dplyr 解决方案将是理想的,但欢迎任何解决方案。

基于关于 SO 的其他相关问题,我猜我需要一些 %in% 的组合和 all ,但我无法完全弄清楚。

最佳答案

您的组合%in%all听起来很有希望,在基础 R 中,您可以利用这些优势,如下所示:

to_keep = sapply(lapply(split(x,x$ID),function(x) {unique(x$Hour)}), 
function(x) {all(testVector %in% x)})
x = x[x$ID %in% names(to_keep)[to_keep],]

或者类似地,但跳过不必要的 lapply 并根据 d.b. 提高效率。在评论中:
temp = sapply(split(x, x$ID), function(a) all(testVector %in% a$Hour))
x[temp[match(x$ID, names(temp))],]

输出:
  ID Hour
1 A 0
2 A 2
3 A 5
4 A 6
5 A 9
6 B 0
7 B 2
8 B 5
9 B 6

希望这可以帮助!

关于r - 过滤匹配向量所有值的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45598397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com