R 用局部最小值和全局最大值查找范围内的所有数字

R 用局部最小值和全局最大值查找范围内的所有数字,r,range,data.table,dplyr,R,Range,Data.table,Dplyr,我有一个dataframetestData,它由许多唯一的id组成。我的目标是确定id是否包含month、yday和week范围内的所有可能整数,其中min是每个id的第一个值,max是整个列范围内的最大值 请注意,这与 换句话说,如果id的所有可能值都在month的范围内,那么它应该收到t。例如,在month下,其中id=1,整个列的最小值为2,最大值为5,因此1应接收到true,因为存在值2、3、4和5。但是,如果id=2,则只有值1、2、4和5,因此跳过了3,因此2应接收f 到目前为止,我

我有一个dataframe
testData
,它由许多唯一的id组成。我的目标是确定id是否包含
month
yday
week
范围内的所有可能整数,其中min是每个id的第一个值,max是整个列范围内的最大值

请注意,这与

换句话说,如果
id
的所有可能值都在
month
的范围内,那么它应该收到
t
。例如,在
month
下,其中
id
=1,整个列的最小值为2,最大值为5,因此1应接收到true,因为存在值2、3、4和5。但是,如果
id
=2,则只有值1、2、4和5,因此跳过了3,因此2应接收
f

到目前为止,我已经有了一个公式,可以获取整个列范围内的所有值(但不是每个
id
的最小值):

最后,输出应如下所示:

> output
  id month yday week
1  1     t    f    t
2  2     f    f    f
3  3     f    f    t
4  4     f    f    f
5  5     t    f    t

使用
dplyr
可以按
id
进行分组,然后只需检查范围的所有元素是否都在每个组的值中。请注意,
min(month)
给出了分组的
id
变量的最小值,但
max(testData$month)
给出了整个列表的最大值

library(dplyr)
tD2 <- testData %>% group_by(id) %>% 
  summarise(month=all(min(month):max(testData$month) %in% month),
            yday=all(min(yday):max(testData$yday) %in% yday),
            week=all(min(week):max(testData$week) %in% week))

tD2
# A tibble: 5 × 4
     id month  yday  week
  <int> <lgl> <lgl> <lgl>
1     1  TRUE FALSE  TRUE
2     2 FALSE FALSE FALSE
3     3 FALSE FALSE  TRUE
4     4 FALSE FALSE FALSE
5     5  TRUE FALSE  TRUE
库(dplyr)
tD2%分组单位(id)%>%
总结(月=全部(最小(月):最大(测试数据$month)%月百分比),
yday=全部(最小值(yday):最大值(测试数据$yday)%in%yday),
周=全部(最小值(周):最大值(testData$week)%in%周)
tD2
#一个tibble:5×4
id月/日/周
1对错对
2假假假假
假假假真
假假假假
5对错对

这是一个新问题,不是重复的问题。请仔细阅读
> output
  id month yday week
1  1     t    f    t
2  2     f    f    f
3  3     f    f    t
4  4     f    f    f
5  5     t    f    t
library(dplyr)
tD2 <- testData %>% group_by(id) %>% 
  summarise(month=all(min(month):max(testData$month) %in% month),
            yday=all(min(yday):max(testData$yday) %in% yday),
            week=all(min(week):max(testData$week) %in% week))

tD2
# A tibble: 5 × 4
     id month  yday  week
  <int> <lgl> <lgl> <lgl>
1     1  TRUE FALSE  TRUE
2     2 FALSE FALSE FALSE
3     3 FALSE FALSE  TRUE
4     4 FALSE FALSE FALSE
5     5  TRUE FALSE  TRUE