按矩阵行 r 中的数据过滤数据框列

时间:2021-04-23 00:57:22

标签: r dplyr

我在 R 中有一个数据框,大约有 500 行和以下列 x y z,我有一个单列和 3 个三行的矩阵,称它们为 a b c。我想根据矩阵行中的值过滤第一个数据帧。基本上,我想在我的第一个数据集中找到行 x 列中的值最接近矩阵 a 行中的值,y 列中的值最接近矩阵中 b 行的值,以及第 z 列最接近矩阵第 z 行的值。我觉得这应该很简单,但我一定在这里遗漏了一些东西。

基本上,我只需要返回数据框中的行,其值与矩阵中的数据最匹配,这样我就可以确定哪一行最能代表矩阵。

这是一个例子:

x <- c(52, -36, 45, 756, 12, 23, 45)
y <- c(34, 56, 68, 23, -4, 2, 23)
z <- c(-1, 2, 5, 4, 6, -4, 3)

df <- data.frame(x, y, z)
vector <- c(-60,20,7)

我想根据 df 中的值过滤 vector,以便我返回一行,该行的值跨越与向量最接近的三列。

1 个答案:

答案 0 :(得分:3)

一种方法是用 vector 减去数据帧,意思是用 vector[1] 减去第 1 列,用 vector[2] 减去第 2 列,以此类推,取绝对值,逐行求和差异并选择具有最小值的行。

df[which.min(rowSums(abs(sweep(df, 2, vector, `-`)))), ]