dplyr 过滤器如何在 R 中工作?
How does dplyr filter works in R?
我只想过滤距离点 (1,1) 小于 10 个单位的行。我的数据框有两列,x 和 y。
这是我试过的:
filter(df, dist( rbind(c(1,2), c(x,y)) ) < 10 )
但是,这是行不通的。它总是 return 是 0 行结果,尽管我知道它应该 return 几行。我该如何调试呢?我想在每次迭代中打印传递给 x 和 y 的每个值。
根据请求,这是 dput(head(df)) 的输出:
structure(list(x = c(1, 2, 3, 4, 5), y = c(1, 1, 1, 1, 1)), .Names = c("x",
"y"), row.names = c(NA, 5L), class = "data.frame")
我会使用您的数据,但它不受过滤器的影响。所以我会随机创建一些东西:
library(dplyr)
set.seed(42)
df <- data_frame(x = sample(20, size = 20, replace = TRUE),
y = sample(20, size = 20, replace = TRUE))
head(df)
# Source: local data frame [6 x 2]
# x y
# <int> <int>
# 1 19 19
# 2 19 3
# 3 6 20
# 4 17 19
# 5 13 2
# 6 11 11
问题是 dplyr::filter
需要逻辑向量。如果您手动检查 dist(...)
的 return,它正在 returning 一个 "n-by-n" 数组。目前尚不清楚 filter
应该如何使用它。
如果你的数据真的只是一个点(c(1, 2)
),那么你需要手动计算已知点和data.frame的变量之间的距离,比如:
filter(df, sqrt( (x - 1)^2 + (y - 2)^2 ) < 10)
# Source: local data frame [2 x 2]
# x y
# <int> <int>
# 1 10 1
# 2 3 5
(我在这里假设欧氏距离。)如果你有更多维度 and/or 一个稍微不同的距离方程,应用程序应该是直截了当的。
如果您对 df
中所有点之间的距离感兴趣(正如您对 dist
的调用所暗示的),那么您可能需要使用 which(..., arr.ind = TRUE)
和一些技巧。或者在这些 (df
) 点和其他点之间进行外部连接。
我只想过滤距离点 (1,1) 小于 10 个单位的行。我的数据框有两列,x 和 y。
这是我试过的:
filter(df, dist( rbind(c(1,2), c(x,y)) ) < 10 )
但是,这是行不通的。它总是 return 是 0 行结果,尽管我知道它应该 return 几行。我该如何调试呢?我想在每次迭代中打印传递给 x 和 y 的每个值。
根据请求,这是 dput(head(df)) 的输出:
structure(list(x = c(1, 2, 3, 4, 5), y = c(1, 1, 1, 1, 1)), .Names = c("x",
"y"), row.names = c(NA, 5L), class = "data.frame")
我会使用您的数据,但它不受过滤器的影响。所以我会随机创建一些东西:
library(dplyr)
set.seed(42)
df <- data_frame(x = sample(20, size = 20, replace = TRUE),
y = sample(20, size = 20, replace = TRUE))
head(df)
# Source: local data frame [6 x 2]
# x y
# <int> <int>
# 1 19 19
# 2 19 3
# 3 6 20
# 4 17 19
# 5 13 2
# 6 11 11
问题是 dplyr::filter
需要逻辑向量。如果您手动检查 dist(...)
的 return,它正在 returning 一个 "n-by-n" 数组。目前尚不清楚 filter
应该如何使用它。
如果你的数据真的只是一个点(c(1, 2)
),那么你需要手动计算已知点和data.frame的变量之间的距离,比如:
filter(df, sqrt( (x - 1)^2 + (y - 2)^2 ) < 10)
# Source: local data frame [2 x 2]
# x y
# <int> <int>
# 1 10 1
# 2 3 5
(我在这里假设欧氏距离。)如果你有更多维度 and/or 一个稍微不同的距离方程,应用程序应该是直截了当的。
如果您对 df
中所有点之间的距离感兴趣(正如您对 dist
的调用所暗示的),那么您可能需要使用 which(..., arr.ind = TRUE)
和一些技巧。或者在这些 (df
) 点和其他点之间进行外部连接。