在一组中查找值 +1
Finding value +1 within a group
我有一个按 Date
分组的大型数据框。在每个日期组中,我想保留相邻房间的行,即 Room.num
= any Room.num
in group +/- 1
Date Room.num
1 2019.08.21 1
2 2019.08.21 2
3 2020.07.18 6
4 2020.07.18 1
5 2020.07.18 3
我只想结束
Date Room.num
1 2019.08.21 1
2 2019.08.21 2
- 我试过了
df %>%
group_by(Date)
filter(Room.num=1)
这给了我
日期Room.num
1 2019.08.21 1
4 2020.07.18 1
- 我也试过了
df %>%
group_by(Date)
filter(any(Room.num=1))
这给了我
Date Room.num
1 2019.08.21 1
2 2019.08.21 2
3 2020.07.18 6
4 2020.07.18 1
5 2020.07.18 3
即任何具有 Room.num=1
的组
- 但我无法做我想做的事情,保留房间号为该
Date
组 中任何其他 Room.num
+/- 1 的行
df %>%
group_by(Date)
filter(Room.num==any(Room.num)+1)
我明白了
Date Room.num
2 2019.08.21 2
第二个Room.num
总是=1
我想你可以在 tidyverse
df <- read.table(header = T, text = 'Date Room.num
1 2019.08.21 1
2 2019.08.21 2
3 2020.07.18 6
4 2020.07.18 1
5 2020.07.18 3
')
library(tidyverse)
df %>%
group_by(Date) %>%
filter(map_lgl(Room.num, ~ .x %in% c(Room.num -1, Room.num +1))) %>%
ungroup()
#> # A tibble: 2 x 2
#> Date Room.num
#> <chr> <int>
#> 1 2019.08.21 1
#> 2 2019.08.21 2
但是,如果您想避免 purrr::map_lgl
使用类似的 baseR 函数,就像这样
df %>%
group_by(Date) %>%
filter(unlist(Map(\(.x) .x %in% c(Room.num -1, Room.num +1), Room.num))) %>%
ungroup()
试试这个解决方案:
#Just creating your dataset
df <- data.frame(Date = c(as.Date('2019-08-21'), as.Date('2019-08-21'),
as.Date('2020-07-18'), as.Date('2020-07-18'),
as.Date('2020-07-18')),
Room.num = c(1,2,6,1,3))
df %>%
group_by(Date) %>%
filter(any(abs(diff(Room.num)) == 1))
我有一个按 Date
分组的大型数据框。在每个日期组中,我想保留相邻房间的行,即 Room.num
= any Room.num
in group +/- 1
Date Room.num
1 2019.08.21 1
2 2019.08.21 2
3 2020.07.18 6
4 2020.07.18 1
5 2020.07.18 3
我只想结束
Date Room.num
1 2019.08.21 1
2 2019.08.21 2
- 我试过了
df %>%
group_by(Date)
filter(Room.num=1)
这给了我
日期Room.num
1 2019.08.21 1
4 2020.07.18 1
- 我也试过了
df %>%
group_by(Date)
filter(any(Room.num=1))
这给了我
Date Room.num
1 2019.08.21 1
2 2019.08.21 2
3 2020.07.18 6
4 2020.07.18 1
5 2020.07.18 3
即任何具有 Room.num=1
- 但我无法做我想做的事情,保留房间号为该
Date
组 中任何其他
Room.num
+/- 1 的行
df %>%
group_by(Date)
filter(Room.num==any(Room.num)+1)
我明白了
Date Room.num
2 2019.08.21 2
第二个Room.num
总是=1
我想你可以在 tidyverse
df <- read.table(header = T, text = 'Date Room.num
1 2019.08.21 1
2 2019.08.21 2
3 2020.07.18 6
4 2020.07.18 1
5 2020.07.18 3
')
library(tidyverse)
df %>%
group_by(Date) %>%
filter(map_lgl(Room.num, ~ .x %in% c(Room.num -1, Room.num +1))) %>%
ungroup()
#> # A tibble: 2 x 2
#> Date Room.num
#> <chr> <int>
#> 1 2019.08.21 1
#> 2 2019.08.21 2
但是,如果您想避免 purrr::map_lgl
使用类似的 baseR 函数,就像这样
df %>%
group_by(Date) %>%
filter(unlist(Map(\(.x) .x %in% c(Room.num -1, Room.num +1), Room.num))) %>%
ungroup()
试试这个解决方案:
#Just creating your dataset
df <- data.frame(Date = c(as.Date('2019-08-21'), as.Date('2019-08-21'),
as.Date('2020-07-18'), as.Date('2020-07-18'),
as.Date('2020-07-18')),
Room.num = c(1,2,6,1,3))
df %>%
group_by(Date) %>%
filter(any(abs(diff(Room.num)) == 1))