R ifelse()使用mutate()生成错误结果 数据 在mutate中使用ifelse会产生错误的结果:

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

我在寻找时间变量的差异。如果差异大于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)), .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))