r - 在组内发现 +1 值
问题描述
我有一个按 . 分组的大型数据框Date
。在每个日期组中,我想保留相邻房间的行,即Room.num
=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
我想结束
Date Room.num
1 2019.08.21 1
2 2019.08.21 2
- 我试过了
df %>%
group_by(Date)
filter(Room.num=1)
这给了我
Date 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
- 但是我无法做我想做的保留房间号为该组中任何其他房间号的 +/- 1
Room.num
的Date
行
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()
推荐阅读
- sas - 如何使用 SAS Programming 扫描和捕获 Linux 文件夹名称?
- mongodb - 如何 insert_many 防止将 _id 以外的键视为主键的重复记录?
- python - 如何在 google co lab 中安装 utils?
- python - Subset_problem 没有给出正确的结果
- javascript - 使用javascript比较多个对象
- amazon-web-services - 如何删除包含空格和特殊字符的 S3 文件夹
- vue.js - 未知的自定义元素,即使它在 vue 的组件部分中清除
- javascript - 如何安全地加载外部 JavaScript 文件?
- android - 在整个活动生命周期中使用片段参数
- r - 如何分配对象的值而不是对象的名称