R ifelse()使用mutate()生成错误结果 数据 在mutate中使用ifelse会产生错误的结果:
我在寻找时间变量的差异。如果差异大于0.1,我想将其标记为大。以下是我尝试过的:R ifelse()使用mutate()生成错误结果 数据 在mutate中使用ifelse会产生错误的结果:,r,dplyr,R,Dplyr,我在寻找时间变量的差异。如果差异大于0.1,我想将其标记为大。以下是我尝试过的: > dput(veh) structure(list(Time = c(138.6, 138.7, 138.8, 138.9, 139, 139.1, 139.2, 139.3, 139.4, 139.5, 139.6, 139.7, 139.8, 139.9, 140, 140.1, 140.2, 140.3, 140.4, 140.5, 140.6, 149.9, 150, 150.1, 150.2
> dput(veh)
structure(list(Time = c(138.6, 138.7, 138.8, 138.9, 139, 139.1,
139.2, 139.3, 139.4, 139.5, 139.6, 139.7, 139.8, 139.9, 140,
140.1, 140.2, 140.3, 140.4, 140.5, 140.6, 149.9, 150, 150.1,
150.2)), .Names = "Time", row.names = c(NA, -25L), class = c("tbl_df",
"tbl", "data.frame"))
我在veh数据集中做错了什么 这些数字并不完全等于0.1。一种选择是将其舍入,然后尝试使用ifelse
如果你取差并检查它,它们不完全是0.1,我们这里有一些不错的浮点数。sprintf%0.20f,diffveh$time可能是一个哦!我不知道差异可能会稍微大于或小于0.1。谢谢你的回答和评论。
library(dplyr)
veh %>%
mutate(diff_t = c(NA, diff(Time))) %>%
mutate(act = ifelse(diff_t>0.1, "BIG", "NA"))
# A tibble: 25 × 3
Time diff_t act
<dbl> <dbl> <chr>
1 138.6 NA <NA>
2 138.7 0.1 NA
3 138.8 0.1 BIG
4 138.9 0.1 NA
5 139.0 0.1 NA
6 139.1 0.1 NA
7 139.2 0.1 NA
8 139.3 0.1 BIG
9 139.4 0.1 NA
10 139.5 0.1 NA
# ... with 15 more rows
foo <- data.frame(a = c(1:5, 8))
foo %>%
mutate(diff_a = c(NA, diff(a))) %>%
mutate(act = ifelse(diff_a>1, "BIG", "NA"))
a diff_a act
1 1 NA <NA>
2 2 1 NA
3 3 1 NA
4 4 1 NA
5 5 1 NA
6 8 3 BIG
veh %>%
mutate(diff_t = round(c(NA, diff(Time)),2),
act = ifelse(diff_t >= 0.1 & !is.na(diff_t), "BIG", NA))