Filter by ranges supplied by two vectors, without a join operation
I wish to do exactly this: Take dates from one dataframe and filter data in another dataframe - R
except without joining, as I am afraid that after I join my data the result will be too big to fit in memory, prior to the filter.
Here is sample data:
tmp_df <- data.frame(a = 1:10)
I wish to do an operation that looks like this:
lower_bound <- c(2, 4)
upper_bound <- c(2, 5)
tmp_df %>%
filter(a >= lower_bound & a <= upper_bound) # does not work as <= is vectorised inappropriately
and my desired result is:
> tmp_df[(tmp_df$a <= 2 & tmp_df$a >= 2) | (tmp_df$a <= 5 & tmp_df$a >= 4), , drop = F]
# one way to get indices to subset data frame, impractical for a long range vector
a
2 2
4 4
5 5
My problem with memory requirements (with respect to the join solution linked) is when tmp_df
has many more rows and the lower_bound
and upper_bound
vectors have many more entries. A dplyr
solution, or a solution that can be part of pipe is preferred.
r data.table dplyr subset
|
show 2 more comments
I wish to do exactly this: Take dates from one dataframe and filter data in another dataframe - R
except without joining, as I am afraid that after I join my data the result will be too big to fit in memory, prior to the filter.
Here is sample data:
tmp_df <- data.frame(a = 1:10)
I wish to do an operation that looks like this:
lower_bound <- c(2, 4)
upper_bound <- c(2, 5)
tmp_df %>%
filter(a >= lower_bound & a <= upper_bound) # does not work as <= is vectorised inappropriately
and my desired result is:
> tmp_df[(tmp_df$a <= 2 & tmp_df$a >= 2) | (tmp_df$a <= 5 & tmp_df$a >= 4), , drop = F]
# one way to get indices to subset data frame, impractical for a long range vector
a
2 2
4 4
5 5
My problem with memory requirements (with respect to the join solution linked) is when tmp_df
has many more rows and the lower_bound
and upper_bound
vectors have many more entries. A dplyr
solution, or a solution that can be part of pipe is preferred.
r data.table dplyr subset
1
Related post: stackoverflow.com/questions/36454565/…
– mt1022
Jun 19 '17 at 4:02
You could simply dotmp_df %>% filter(a == 2 | between(a, 4, 5))
or combine a fewbetween
statements, or you could simply use the same syntax as in base R such astmp_df %>% filter(a == 2 | (a <= 5 & a >= 4))
or eventmp_df %>% filter(a %in% c(2, 4:5))
. I really fail to understand what's the question's about even.
– David Arenburg
Jun 19 '17 at 8:06
The question is about how you do this when the vectors supplying the ranges have lots of elements, say 100 each.
– Alex
Jun 19 '17 at 8:08
As always, you are answering comments without using @ (so I won't see your further comments), but I suggest you clarify that in your question and show a real use case rather just a small example which could be easily solved in many simple ways.
– David Arenburg
Jun 19 '17 at 8:11
I have reworded the question which hopefully addresses your comments regarding the clarity. I do not believe in real use cases when simple examples are easier to read and understand.
– Alex
Jun 19 '17 at 8:26
|
show 2 more comments
I wish to do exactly this: Take dates from one dataframe and filter data in another dataframe - R
except without joining, as I am afraid that after I join my data the result will be too big to fit in memory, prior to the filter.
Here is sample data:
tmp_df <- data.frame(a = 1:10)
I wish to do an operation that looks like this:
lower_bound <- c(2, 4)
upper_bound <- c(2, 5)
tmp_df %>%
filter(a >= lower_bound & a <= upper_bound) # does not work as <= is vectorised inappropriately
and my desired result is:
> tmp_df[(tmp_df$a <= 2 & tmp_df$a >= 2) | (tmp_df$a <= 5 & tmp_df$a >= 4), , drop = F]
# one way to get indices to subset data frame, impractical for a long range vector
a
2 2
4 4
5 5
My problem with memory requirements (with respect to the join solution linked) is when tmp_df
has many more rows and the lower_bound
and upper_bound
vectors have many more entries. A dplyr
solution, or a solution that can be part of pipe is preferred.
r data.table dplyr subset
I wish to do exactly this: Take dates from one dataframe and filter data in another dataframe - R
except without joining, as I am afraid that after I join my data the result will be too big to fit in memory, prior to the filter.
Here is sample data:
tmp_df <- data.frame(a = 1:10)
I wish to do an operation that looks like this:
lower_bound <- c(2, 4)
upper_bound <- c(2, 5)
tmp_df %>%
filter(a >= lower_bound & a <= upper_bound) # does not work as <= is vectorised inappropriately
and my desired result is:
> tmp_df[(tmp_df$a <= 2 & tmp_df$a >= 2) | (tmp_df$a <= 5 & tmp_df$a >= 4), , drop = F]
# one way to get indices to subset data frame, impractical for a long range vector
a
2 2
4 4
5 5
My problem with memory requirements (with respect to the join solution linked) is when tmp_df
has many more rows and the lower_bound
and upper_bound
vectors have many more entries. A dplyr
solution, or a solution that can be part of pipe is preferred.
r data.table dplyr subset
r data.table dplyr subset
edited Nov 22 at 18:13
Henrik
40.7k992107
40.7k992107
asked Jun 19 '17 at 3:06
Alex
6,87554180
6,87554180
1
Related post: stackoverflow.com/questions/36454565/…
– mt1022
Jun 19 '17 at 4:02
You could simply dotmp_df %>% filter(a == 2 | between(a, 4, 5))
or combine a fewbetween
statements, or you could simply use the same syntax as in base R such astmp_df %>% filter(a == 2 | (a <= 5 & a >= 4))
or eventmp_df %>% filter(a %in% c(2, 4:5))
. I really fail to understand what's the question's about even.
– David Arenburg
Jun 19 '17 at 8:06
The question is about how you do this when the vectors supplying the ranges have lots of elements, say 100 each.
– Alex
Jun 19 '17 at 8:08
As always, you are answering comments without using @ (so I won't see your further comments), but I suggest you clarify that in your question and show a real use case rather just a small example which could be easily solved in many simple ways.
– David Arenburg
Jun 19 '17 at 8:11
I have reworded the question which hopefully addresses your comments regarding the clarity. I do not believe in real use cases when simple examples are easier to read and understand.
– Alex
Jun 19 '17 at 8:26
|
show 2 more comments
1
Related post: stackoverflow.com/questions/36454565/…
– mt1022
Jun 19 '17 at 4:02
You could simply dotmp_df %>% filter(a == 2 | between(a, 4, 5))
or combine a fewbetween
statements, or you could simply use the same syntax as in base R such astmp_df %>% filter(a == 2 | (a <= 5 & a >= 4))
or eventmp_df %>% filter(a %in% c(2, 4:5))
. I really fail to understand what's the question's about even.
– David Arenburg
Jun 19 '17 at 8:06
The question is about how you do this when the vectors supplying the ranges have lots of elements, say 100 each.
– Alex
Jun 19 '17 at 8:08
As always, you are answering comments without using @ (so I won't see your further comments), but I suggest you clarify that in your question and show a real use case rather just a small example which could be easily solved in many simple ways.
– David Arenburg
Jun 19 '17 at 8:11
I have reworded the question which hopefully addresses your comments regarding the clarity. I do not believe in real use cases when simple examples are easier to read and understand.
– Alex
Jun 19 '17 at 8:26
1
1
Related post: stackoverflow.com/questions/36454565/…
– mt1022
Jun 19 '17 at 4:02
Related post: stackoverflow.com/questions/36454565/…
– mt1022
Jun 19 '17 at 4:02
You could simply do
tmp_df %>% filter(a == 2 | between(a, 4, 5))
or combine a few between
statements, or you could simply use the same syntax as in base R such as tmp_df %>% filter(a == 2 | (a <= 5 & a >= 4))
or even tmp_df %>% filter(a %in% c(2, 4:5))
. I really fail to understand what's the question's about even.– David Arenburg
Jun 19 '17 at 8:06
You could simply do
tmp_df %>% filter(a == 2 | between(a, 4, 5))
or combine a few between
statements, or you could simply use the same syntax as in base R such as tmp_df %>% filter(a == 2 | (a <= 5 & a >= 4))
or even tmp_df %>% filter(a %in% c(2, 4:5))
. I really fail to understand what's the question's about even.– David Arenburg
Jun 19 '17 at 8:06
The question is about how you do this when the vectors supplying the ranges have lots of elements, say 100 each.
– Alex
Jun 19 '17 at 8:08
The question is about how you do this when the vectors supplying the ranges have lots of elements, say 100 each.
– Alex
Jun 19 '17 at 8:08
As always, you are answering comments without using @ (so I won't see your further comments), but I suggest you clarify that in your question and show a real use case rather just a small example which could be easily solved in many simple ways.
– David Arenburg
Jun 19 '17 at 8:11
As always, you are answering comments without using @ (so I won't see your further comments), but I suggest you clarify that in your question and show a real use case rather just a small example which could be easily solved in many simple ways.
– David Arenburg
Jun 19 '17 at 8:11
I have reworded the question which hopefully addresses your comments regarding the clarity. I do not believe in real use cases when simple examples are easier to read and understand.
– Alex
Jun 19 '17 at 8:26
I have reworded the question which hopefully addresses your comments regarding the clarity. I do not believe in real use cases when simple examples are easier to read and understand.
– Alex
Jun 19 '17 at 8:26
|
show 2 more comments
2 Answers
2
active
oldest
votes
Maybe you could borrow the inrange
function from data.table
, which
checks whether each value in x is in between any of the
intervals provided in lower,upper.
Usage:
inrange(x, lower, upper, incbounds=TRUE)
library(dplyr); library(data.table)
tmp_df %>% filter(inrange(a, c(2,4), c(2,5)))
# a
#1 2
#2 4
#3 5
2
Great solution ````
– W-B
Jun 19 '17 at 3:20
2
@Wen Thanks for the comment.
– Psidom
Jun 19 '17 at 3:20
2
Very neat, although I note that in the helpfile it saysinrange makes use of this functionality and performs a range join
. I have to check that this does not cause memory requirements to blow up.
– Alex
Jun 19 '17 at 3:53
2
@Alex, it was precisely implemented by having memory requirements in mind. I'd love to know how it turned up on your original dataset.
– Arun
Jun 19 '17 at 19:52
2
@arun I am doing a 4 million row by 30 million row range join (sinceinrange
uses non equi-joins I decided to rewrite everything usingdata.table
syntax) and it is easily staying in memory.
– Alex
Nov 17 '17 at 9:55
|
show 1 more comment
If you'd like to stick with dplyr
it has similar functionality provided through the between
function.
# ranges I want to check between
my_ranges <- list(c(2,2), c(4,5), c(6,7))
tmp_df <- data.frame(a=1:10)
tmp_df %>%
filter(apply(bind_rows(lapply(my_ranges,
FUN=function(x, a){
data.frame(t(between(a, x[1], x[2])))
}, a)
), 2, any))
a
1 2
2 4
3 5
4 6
5 7
Just be aware that the argument boundaries are included by default and that cannot be changed as with inrange
thanks for this, the problem is that I do not know how to, and is possible inefficient, to expand each vector into individual OR statements to give the required filtration
– Alex
Jun 19 '17 at 3:47
Have you considered keeping your ranges in a list, then using other functions that do the expansion for you? I've edited my answer to be more like this case, although, it makes the code less readable. I'm sure there's a cleaner way to write the code, it's just not coming to me right now.
– Steven M. Mortimer
Jun 19 '17 at 4:01
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f44621700%2ffilter-by-ranges-supplied-by-two-vectors-without-a-join-operation%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Maybe you could borrow the inrange
function from data.table
, which
checks whether each value in x is in between any of the
intervals provided in lower,upper.
Usage:
inrange(x, lower, upper, incbounds=TRUE)
library(dplyr); library(data.table)
tmp_df %>% filter(inrange(a, c(2,4), c(2,5)))
# a
#1 2
#2 4
#3 5
2
Great solution ````
– W-B
Jun 19 '17 at 3:20
2
@Wen Thanks for the comment.
– Psidom
Jun 19 '17 at 3:20
2
Very neat, although I note that in the helpfile it saysinrange makes use of this functionality and performs a range join
. I have to check that this does not cause memory requirements to blow up.
– Alex
Jun 19 '17 at 3:53
2
@Alex, it was precisely implemented by having memory requirements in mind. I'd love to know how it turned up on your original dataset.
– Arun
Jun 19 '17 at 19:52
2
@arun I am doing a 4 million row by 30 million row range join (sinceinrange
uses non equi-joins I decided to rewrite everything usingdata.table
syntax) and it is easily staying in memory.
– Alex
Nov 17 '17 at 9:55
|
show 1 more comment
Maybe you could borrow the inrange
function from data.table
, which
checks whether each value in x is in between any of the
intervals provided in lower,upper.
Usage:
inrange(x, lower, upper, incbounds=TRUE)
library(dplyr); library(data.table)
tmp_df %>% filter(inrange(a, c(2,4), c(2,5)))
# a
#1 2
#2 4
#3 5
2
Great solution ````
– W-B
Jun 19 '17 at 3:20
2
@Wen Thanks for the comment.
– Psidom
Jun 19 '17 at 3:20
2
Very neat, although I note that in the helpfile it saysinrange makes use of this functionality and performs a range join
. I have to check that this does not cause memory requirements to blow up.
– Alex
Jun 19 '17 at 3:53
2
@Alex, it was precisely implemented by having memory requirements in mind. I'd love to know how it turned up on your original dataset.
– Arun
Jun 19 '17 at 19:52
2
@arun I am doing a 4 million row by 30 million row range join (sinceinrange
uses non equi-joins I decided to rewrite everything usingdata.table
syntax) and it is easily staying in memory.
– Alex
Nov 17 '17 at 9:55
|
show 1 more comment
Maybe you could borrow the inrange
function from data.table
, which
checks whether each value in x is in between any of the
intervals provided in lower,upper.
Usage:
inrange(x, lower, upper, incbounds=TRUE)
library(dplyr); library(data.table)
tmp_df %>% filter(inrange(a, c(2,4), c(2,5)))
# a
#1 2
#2 4
#3 5
Maybe you could borrow the inrange
function from data.table
, which
checks whether each value in x is in between any of the
intervals provided in lower,upper.
Usage:
inrange(x, lower, upper, incbounds=TRUE)
library(dplyr); library(data.table)
tmp_df %>% filter(inrange(a, c(2,4), c(2,5)))
# a
#1 2
#2 4
#3 5
edited Jun 19 '17 at 3:22
answered Jun 19 '17 at 3:19
Psidom
122k1281125
122k1281125
2
Great solution ````
– W-B
Jun 19 '17 at 3:20
2
@Wen Thanks for the comment.
– Psidom
Jun 19 '17 at 3:20
2
Very neat, although I note that in the helpfile it saysinrange makes use of this functionality and performs a range join
. I have to check that this does not cause memory requirements to blow up.
– Alex
Jun 19 '17 at 3:53
2
@Alex, it was precisely implemented by having memory requirements in mind. I'd love to know how it turned up on your original dataset.
– Arun
Jun 19 '17 at 19:52
2
@arun I am doing a 4 million row by 30 million row range join (sinceinrange
uses non equi-joins I decided to rewrite everything usingdata.table
syntax) and it is easily staying in memory.
– Alex
Nov 17 '17 at 9:55
|
show 1 more comment
2
Great solution ````
– W-B
Jun 19 '17 at 3:20
2
@Wen Thanks for the comment.
– Psidom
Jun 19 '17 at 3:20
2
Very neat, although I note that in the helpfile it saysinrange makes use of this functionality and performs a range join
. I have to check that this does not cause memory requirements to blow up.
– Alex
Jun 19 '17 at 3:53
2
@Alex, it was precisely implemented by having memory requirements in mind. I'd love to know how it turned up on your original dataset.
– Arun
Jun 19 '17 at 19:52
2
@arun I am doing a 4 million row by 30 million row range join (sinceinrange
uses non equi-joins I decided to rewrite everything usingdata.table
syntax) and it is easily staying in memory.
– Alex
Nov 17 '17 at 9:55
2
2
Great solution ````
– W-B
Jun 19 '17 at 3:20
Great solution ````
– W-B
Jun 19 '17 at 3:20
2
2
@Wen Thanks for the comment.
– Psidom
Jun 19 '17 at 3:20
@Wen Thanks for the comment.
– Psidom
Jun 19 '17 at 3:20
2
2
Very neat, although I note that in the helpfile it says
inrange makes use of this functionality and performs a range join
. I have to check that this does not cause memory requirements to blow up.– Alex
Jun 19 '17 at 3:53
Very neat, although I note that in the helpfile it says
inrange makes use of this functionality and performs a range join
. I have to check that this does not cause memory requirements to blow up.– Alex
Jun 19 '17 at 3:53
2
2
@Alex, it was precisely implemented by having memory requirements in mind. I'd love to know how it turned up on your original dataset.
– Arun
Jun 19 '17 at 19:52
@Alex, it was precisely implemented by having memory requirements in mind. I'd love to know how it turned up on your original dataset.
– Arun
Jun 19 '17 at 19:52
2
2
@arun I am doing a 4 million row by 30 million row range join (since
inrange
uses non equi-joins I decided to rewrite everything using data.table
syntax) and it is easily staying in memory.– Alex
Nov 17 '17 at 9:55
@arun I am doing a 4 million row by 30 million row range join (since
inrange
uses non equi-joins I decided to rewrite everything using data.table
syntax) and it is easily staying in memory.– Alex
Nov 17 '17 at 9:55
|
show 1 more comment
If you'd like to stick with dplyr
it has similar functionality provided through the between
function.
# ranges I want to check between
my_ranges <- list(c(2,2), c(4,5), c(6,7))
tmp_df <- data.frame(a=1:10)
tmp_df %>%
filter(apply(bind_rows(lapply(my_ranges,
FUN=function(x, a){
data.frame(t(between(a, x[1], x[2])))
}, a)
), 2, any))
a
1 2
2 4
3 5
4 6
5 7
Just be aware that the argument boundaries are included by default and that cannot be changed as with inrange
thanks for this, the problem is that I do not know how to, and is possible inefficient, to expand each vector into individual OR statements to give the required filtration
– Alex
Jun 19 '17 at 3:47
Have you considered keeping your ranges in a list, then using other functions that do the expansion for you? I've edited my answer to be more like this case, although, it makes the code less readable. I'm sure there's a cleaner way to write the code, it's just not coming to me right now.
– Steven M. Mortimer
Jun 19 '17 at 4:01
add a comment |
If you'd like to stick with dplyr
it has similar functionality provided through the between
function.
# ranges I want to check between
my_ranges <- list(c(2,2), c(4,5), c(6,7))
tmp_df <- data.frame(a=1:10)
tmp_df %>%
filter(apply(bind_rows(lapply(my_ranges,
FUN=function(x, a){
data.frame(t(between(a, x[1], x[2])))
}, a)
), 2, any))
a
1 2
2 4
3 5
4 6
5 7
Just be aware that the argument boundaries are included by default and that cannot be changed as with inrange
thanks for this, the problem is that I do not know how to, and is possible inefficient, to expand each vector into individual OR statements to give the required filtration
– Alex
Jun 19 '17 at 3:47
Have you considered keeping your ranges in a list, then using other functions that do the expansion for you? I've edited my answer to be more like this case, although, it makes the code less readable. I'm sure there's a cleaner way to write the code, it's just not coming to me right now.
– Steven M. Mortimer
Jun 19 '17 at 4:01
add a comment |
If you'd like to stick with dplyr
it has similar functionality provided through the between
function.
# ranges I want to check between
my_ranges <- list(c(2,2), c(4,5), c(6,7))
tmp_df <- data.frame(a=1:10)
tmp_df %>%
filter(apply(bind_rows(lapply(my_ranges,
FUN=function(x, a){
data.frame(t(between(a, x[1], x[2])))
}, a)
), 2, any))
a
1 2
2 4
3 5
4 6
5 7
Just be aware that the argument boundaries are included by default and that cannot be changed as with inrange
If you'd like to stick with dplyr
it has similar functionality provided through the between
function.
# ranges I want to check between
my_ranges <- list(c(2,2), c(4,5), c(6,7))
tmp_df <- data.frame(a=1:10)
tmp_df %>%
filter(apply(bind_rows(lapply(my_ranges,
FUN=function(x, a){
data.frame(t(between(a, x[1], x[2])))
}, a)
), 2, any))
a
1 2
2 4
3 5
4 6
5 7
Just be aware that the argument boundaries are included by default and that cannot be changed as with inrange
edited Jun 19 '17 at 4:07
answered Jun 19 '17 at 3:30
Steven M. Mortimer
844618
844618
thanks for this, the problem is that I do not know how to, and is possible inefficient, to expand each vector into individual OR statements to give the required filtration
– Alex
Jun 19 '17 at 3:47
Have you considered keeping your ranges in a list, then using other functions that do the expansion for you? I've edited my answer to be more like this case, although, it makes the code less readable. I'm sure there's a cleaner way to write the code, it's just not coming to me right now.
– Steven M. Mortimer
Jun 19 '17 at 4:01
add a comment |
thanks for this, the problem is that I do not know how to, and is possible inefficient, to expand each vector into individual OR statements to give the required filtration
– Alex
Jun 19 '17 at 3:47
Have you considered keeping your ranges in a list, then using other functions that do the expansion for you? I've edited my answer to be more like this case, although, it makes the code less readable. I'm sure there's a cleaner way to write the code, it's just not coming to me right now.
– Steven M. Mortimer
Jun 19 '17 at 4:01
thanks for this, the problem is that I do not know how to, and is possible inefficient, to expand each vector into individual OR statements to give the required filtration
– Alex
Jun 19 '17 at 3:47
thanks for this, the problem is that I do not know how to, and is possible inefficient, to expand each vector into individual OR statements to give the required filtration
– Alex
Jun 19 '17 at 3:47
Have you considered keeping your ranges in a list, then using other functions that do the expansion for you? I've edited my answer to be more like this case, although, it makes the code less readable. I'm sure there's a cleaner way to write the code, it's just not coming to me right now.
– Steven M. Mortimer
Jun 19 '17 at 4:01
Have you considered keeping your ranges in a list, then using other functions that do the expansion for you? I've edited my answer to be more like this case, although, it makes the code less readable. I'm sure there's a cleaner way to write the code, it's just not coming to me right now.
– Steven M. Mortimer
Jun 19 '17 at 4:01
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f44621700%2ffilter-by-ranges-supplied-by-two-vectors-without-a-join-operation%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Related post: stackoverflow.com/questions/36454565/…
– mt1022
Jun 19 '17 at 4:02
You could simply do
tmp_df %>% filter(a == 2 | between(a, 4, 5))
or combine a fewbetween
statements, or you could simply use the same syntax as in base R such astmp_df %>% filter(a == 2 | (a <= 5 & a >= 4))
or eventmp_df %>% filter(a %in% c(2, 4:5))
. I really fail to understand what's the question's about even.– David Arenburg
Jun 19 '17 at 8:06
The question is about how you do this when the vectors supplying the ranges have lots of elements, say 100 each.
– Alex
Jun 19 '17 at 8:08
As always, you are answering comments without using @ (so I won't see your further comments), but I suggest you clarify that in your question and show a real use case rather just a small example which could be easily solved in many simple ways.
– David Arenburg
Jun 19 '17 at 8:11
I have reworded the question which hopefully addresses your comments regarding the clarity. I do not believe in real use cases when simple examples are easier to read and understand.
– Alex
Jun 19 '17 at 8:26