首页 > 解决方案 > 来自外部数据帧的 dplyr 索引导致不连贯的值

问题描述

我有一个带有值的数据框,x并希望找到它们所属的区间,该区间存储在limit$interval. 然后我想用这些值替换这些值limit$target1.4509例如,应该是的第一个值1.5等等。问题是,有些值df_target[64,]有一个 x 值,可以找到1.2926正确的limit_index(1),但目标结果3.5显然不是我想要的。为什么?这是一个代表:

require(dplyr)
require(tibble)

set.seed(123)

x <- runif(100, -2, 10)
limit <- data.frame(interval = 1:4, target = 1:4 + 0.5)
limit_index <- findInterval(x, limit$interval)
df <- data.frame(x = x, limit_index = limit_index)
df_target <- df %>% mutate(target = ifelse(limit_index == 0, x, limit$target[limit_index]))

标签: rdplyr

解决方案


这是使用 a 的解决方案left_join

df %>% 
  left_join(limit, by = c("limit_index" = "interval")) %>% 
   mutate(target = ifelse(is.na(target), x, target))

这给了我们:

            x limit_index     target
1   1.4509302           1  1.5000000
2   7.4596616           4  4.5000000
3   2.9077231           2  2.5000000
4   8.5962088           4  4.5000000
5   9.2856074           4  4.5000000
6  -1.4533220           0 -1.4533220
7   4.3372659           4  4.5000000
8   8.7090285           4  4.5000000
9   4.6172202           4  4.5000000
10  3.4793768           3  3.5000000
11  9.4820001           4  4.5000000
12  3.4400099           3  3.5000000
13  6.1308476           4  4.5000000
14  4.8716008           4  4.5000000
15 -0.7649038           0 -0.7649038
16  8.7978996           4  4.5000000
17  0.9530528           0  0.9530528
18 -1.4952856           0 -1.4952856
19  1.9350486           1  1.5000000
20  9.4540438           4  4.5000000

推荐阅读