我有一個帶有值的資料框,x想找到它們所屬的間隔,該間隔存盤在limit$interval. 然后我想用值替換這些值limit$target。例如,第一個值1.4509應該是1.5等等。問題是,有些值df_target[64,]的 x 值可以找到1.2926正確的limit_index(1),但目標結果3.5顯然不是我想要的。為什么?這是一個reprex:
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]))
uj5u.com熱心網友回復:
可能是由于長度為limit$target[limit_index])74。如果您使用if_else()from dplyr 而不是ifelse()它會引發錯誤。
以下是解決方案的建議:
df %>% mutate(target = case_when(limit_index == 0 ~ x,
limit_index == 1 ~ 1.5,
limit_index == 2 ~ 2.5,
limit_index == 3 ~ 3.5,
limit_index == 4 ~ 4.5))
uj5u.com熱心網友回復:
這是使用 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/312519.html
上一篇:從帶有文本和數字的列中提取數字
