gpt4 book ai didi

r - 基于存储在独立有序向量中的值对对数据帧进行子集

转载 作者:行者123 更新时间:2023-12-04 10:18:22 24 4
gpt4 key购买 nike

我有一个 R 数据框,我需要从中提取数据子集。子集将基于数据框中的两列。例如:

A <- c(1,2,3,3,5,1)
B <- c(6,7,8,9,8,8)
Value <- c(9,5,2,1,2,2)
DATA <- data.frame(A,B,Value)

这就是 DATA 的样子
A B Value
1 6 9
2 7 5
3 8 2
3 9 1
5 8 2
1 8 2

我想要那些 (A,B) 组合为 (1,6) 和 (3,8) 的数据行。这些对存储为 A 和 B 的单独(有序)向量:
AList <- c(1,3)
BList <- c(6,8)

现在,我试图通过比较 AList 中是否存在 A 列来对数据进行子集化。和 B列存在于BList中
DATA[(DATA$A %in% AList & DATA$B %in% BList),]

子集化结果如下所示。除了值对 (1,6) 和 (3,8) 我还得到 (1,8)。基本上,这个过滤器为我提供了 AList 和 BList 中所有组合的值对。我如何将其限制为 (1,6) 和 (3,8)?
A B Value
1 6 9
3 8 2
1 8 2

这是我想要的结果:
A B Value
1 6 9
3 8 2

最佳答案

这是 merge 的工作:

KEYS <- data.frame(A = AList, B = BList)
merge(DATA, KEYS)

# A B Value
# 1 1 6 9
# 2 3 8 2

编辑 :在 OP 在下面的评论中表达了他对逻辑向量的偏好之后,我会建议以下之一。

使用 merge :
df.in.df <- function(x, y) {
common.names <- intersect(names(x), names(y))
idx <- seq_len(nrow(x))
x <- x[common.names]
y <- y[common.names]
x <- transform(x, .row.idx = idx)
idx %in% merge(x, y)$.row.idx
}

interaction :
df.in.df <- function(x, y) {
common.names <- intersect(names(x), names(y))
interaction(x[common.names]) %in% interaction(y[common.names])
}

在这两种情况下:
df.in.df(DATA, KEYS)
# [1] TRUE FALSE TRUE FALSE FALSE FALSE

关于r - 基于存储在独立有序向量中的值对对数据帧进行子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22492884/

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