【问题标题】:Subset data frame 1 using data frame 2 without knowing columns in data frame 2 in advance在事先不知道数据框 2 中的列的情况下,使用数据框 2 子集数据框 1
【发布时间】:2021-06-23 10:07:13
【问题描述】:

我有两个数据框:

x <- data.frame(A1 = c(1,1,1,1,2,2,2,2), A2 = c(1,1,2,2,1,1,2,2), value = 1:8)
y <- data.frame(A1 = 2, A2 = 2)
x
y

我需要从 x 中选择在 y 中指定的 A1 和 A2 值的行(在本例中为第 7 行和第 8 行)。

但是,我事先不知道我会有多少以“A”开头的列。它可能只是一个(A1)或几个(A1、A2、A3 等) 重要提示:x 和 y 始终具有以“A”开头的相同列,而 y 始终只有一行。

我可以使用循环得到我想要的:

out <- x
y_columns <- names(y)
for(i in y_columns) out <- out[out[[i]] == y[[i]],]
out

有没有更优雅的方式来实现我的目标?

非常感谢!

【问题讨论】:

  • merge(x, y) 使用与 A1 和 A2 的键合并,所以基本上它们匹配的任何列都会产生相应的行,我希望我能理解你
  • 谢谢!当然!!
  • 你能把它作为答案吗?我会接受的。

标签: r subset


【解决方案1】:

merge(x, y) 可以在这里工作,让我们进一步分解,所以函数说:

merge(x, y, by = intersect(names(x), names(y)),
      by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,
      sort = TRUE, suffixes = c(".x",".y"), no.dups = TRUE,
      incomparables = NULL, ...)

这里的by参数基本上是两个表的列名的交集,在这种情况下是A1和A2。但是,如果父/查找表中有多行,它将返回多条记录。

这里,merge(x, y) 返回

 A1 A2 value
1  2  2     7
2  2  2     8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-16
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 2018-05-18
    相关资源
    最近更新 更多