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

标签 r match subset

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

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

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

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/

相关文章:

r - 给定从连续单变量分布中得出的一组随机数,找到分布

mysql - match () against () 是否需要 4 个参数才能工作?

Python 2.7 匹配 CSV 文件行中的精确字符串

fonts - 使用Fontforge从TTF字体中删除所有未使用的字符

r - 使用自动绘图显示非默认主成分 (ggfortify)

r - 如何使用R或PowerShell从文本文件中提取数据?

r - 提取r中分号之间的字符

javascript - 不区分大小写的 JS 匹配方法在 IE/Chrome 中无法正常工作?

r - 某些组中的错误对于 'qda' 来说太小了

r - 基于应用于多列的单个条件对数据框进行子集