我在 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
,以便我返回一行,该行的值跨越与向量最接近的三列。
答案 0 :(得分:3)
一种方法是用 vector
减去数据帧,意思是用 vector[1]
减去第 1 列,用 vector[2]
减去第 2 列,以此类推,取绝对值,逐行求和差异并选择具有最小值的行。
df[which.min(rowSums(abs(sweep(df, 2, vector, `-`)))), ]