r - 来自外部数据帧的 dplyr 索引导致不连贯的值
问题描述
我有一个带有值的数据框,x
并希望找到它们所属的区间,该区间存储在limit$interval
. 然后我想用这些值替换这些值limit$target
。1.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]))
解决方案
这是使用 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
推荐阅读
- php - Cant upload file to web site server in php
- python - 删除 HTML 代码,只留下内容?(html2文本错误)
- google-chrome-extension - Chrome 扩展描述重复文本
- android - Android Studio ImageView 数组 NullPointerException
- python - 为什么我的 python if else 语句不能输入 HTML?
- graph-theory - 归纳证明,某种算法不声称非 3 色图是 3 色图
- google-maps - 我的 Google Sheets API 调用被阻止(错误 403)
- java - 如何填充通过鼠标单击绘制的不规则多边形?
- r - 过滤多次
- javascript - 如何从 URL 获取 JSON