> 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"))
我发现了Time
变量的差异。如果差异大于0.1
,我希望将其标记为BIG
。以下是我的尝试:
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
为什么0.1
在此标记为BIG
?
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
数据集中做错了什么?
答案 0 :(得分:1)
这些数字并不完全等于0.1
。一个选项是round
,然后尝试使用ifelse
veh %>%
mutate(diff_t = round(c(NA, diff(Time)),2),
act = ifelse(diff_t >= 0.1 & !is.na(diff_t), "BIG", NA))