t1 <- data.frame(
team = c('a', 'b', 'c', 'd', 'e'),
value1 = c(0.285, 0.37, 0.45, 0.42, 0.385),
value2 = c(41, 51, 55, 61, 64)
)
pctiles = data.frame(
pctile = c(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
value1 = c(0.253, 0.291, 0.325, 0.336, 0.345, 0.35, 0.367, 0.39, 0.4, 0.41, 0.435),
value2 = c(35, 50, 54, 57, 59, 61, 62, 65, 71, 81, 95)
)
我们需要基于pctiles
Dataframe 中的值最接近t1
Dataframe 中的值,将pctile
值从pctiles
Dataframe 连接到t1
Dataframe 。例如,在t1
中,队A具有值1为0.285,其与pctiles$value1
中的0.291最接近。因此,a value1pctile
of 1应该被连接到t1上。通过这种逻辑,连接每个值的最接近的pctile,我们要得到的输出将是:
output_df <- data.frame(
team = c('a', 'b', 'c', 'd', 'e'),
value1 = c(0.285, 0.37, 0.45, 0.43, 0.385),
value2 = c(41, 51, 56, 61, 64),
value1pctile = c(1, 6, 10, 9, 7),
value2pctile = c(0, 1, 3, 5, 7)
)
我们并不担心当t1
中的值正好福尔斯在pctiles
中的两个值之间时如何处理。无论是更高还是更低的pctile
值都很好。我们如何在R中实现这一点?
**编辑:**我们正在尝试使用fuzzy_left_join
,但遇到错误:
t1 <- fuzzyjoin::fuzzy_left_join(
t1, pctiles,
by = c("value1" = "value1"),
match_fun = "min_diff",
distance_col = "dist"
)
> Error in which(m) : argument to 'which' is not logical
似乎我们错误地使用了match_fun
和distance_col
。
1条答案
按热度按时间0pizxfdo1#
data.table
: