gpt4 book ai didi

r - 将一个数据框的列中的值与另一个数据框中的列的子集匹配

转载 作者:行者123 更新时间:2023-12-02 02:03:24 24 4
gpt4 key购买 nike

我正在尝试将一个数据框的一列中的值与第二个数据框的一列中的值进行匹配。棘手的部分是我想使用第二个数据帧的子集进行匹配(由第二个数据帧中与正在匹配的数据帧不同的列指定)。这与尝试基于数据帧之间的匹配进行子集化的常见问题不同。

我的问题恰恰相反——我想根据子集匹配数据框。具体来说,我想将第二个数据框中列的子集与第一个数据框中的整个列进行匹配,然后在第一个数据框中创建新列以显示是否为每个列进行了匹配子集。

这些子集可以有不同的行数。使用下面的两个虚拟数据框...

DF1 <- data.frame(number=1:10)

DF2 <- data.frame(category = rep(c("A","B","C"), c(5,7,3)),
number = sample(10, size=15, replace=T))

...目标是创建三个新列(DF1$ADF1$BDF$C)显示 DF1$number 中的值是否与 DF2$number 中的值匹配 DF2$category 的每个子集。理想情况下,如果匹配成功,这些新列中的行将显示“1”,如果没有匹配,则显示“0”。使用下面的虚拟数据,我最终会得到 DF1 有 4 列(DF1$numberDF1$ADF1$B DF$C),每行 10 行。

请注意,在我实际的第二个数据框中,我有大量类别,因此我不想为了实现此目标所需的任何操作而单独输入它们。我希望这是有道理的!抱歉,如果我遗漏了一些明显的东西,非常感谢您提供的任何帮助。

最佳答案

这应该有效:

sapply(split(DF2$number, DF2$category), function(x) DF1$number %in% x + 0)

A B C
[1,] 0 0 1
[2,] 1 1 0
[3,] 1 1 1
[4,] 0 1 0
[5,] 0 0 1
[6,] 0 1 0
[7,] 1 1 0
[8,] 1 0 0
[9,] 1 0 0
[10,] 0 1 0

您可以像这样将其添加回 DF1:

data.frame(
DF1,
sapply(split(DF2$number, DF2$category), function(x) DF1$number %in% x + 0)
)

number A B C
1 1 0 0 1
2 2 1 1 0
3 3 1 1 1
4 4 0 1 0
5 5 0 0 1
6 6 0 1 0
7 7 1 1 0
8 8 1 0 0
9 9 1 0 0
10 10 0 1 0

关于r - 将一个数据框的列中的值与另一个数据框中的列的子集匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16126003/

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