简体   繁体   中英

subsets of different vectors R

I have three vectors as shown below.

q = c("a == 1", "a == 2", "a == 3")
w = c("b >= 50", "b >= 100")
t = c("c >= 40 & c <= 80", "c > 80")

I want to be able to combine all the vectors into one large vector so that every possible subset is in a larger vector. For example I want to have

("a == 1 & b >= 50", "a == 1 & b >= 100", "a ==2 & b >=50",
"a == 2 & b >= 100", "a == 3 & b >= 50", "a == 3 & b >= 100",
"a ==1 & c >= 40 & c <= 80", "a ==1 & c > 80",
"a ==2 & c >= 40 & c <= 80", "a ==2 & c > 80",
"a ==3 & c >= 40 & c <= 80", "a ==3 & c > 80",
"b  >= 50 & c >= 40 & c <= 80", "b >= 50 & c > 80",
"b  >= 100 & c >= 40 & c <= 80", "b >= 100 & c > 80", 
"a == 1 & b >= 50 & c >= 40 & c <= 80", "a == 1 & b >=50 & c > 80",
"a == 2 & b >= 50 & c >= 40 & c <= 80", "a == 2 & b >=50 & c > 80",
"a == 3 & b >= 50 & c >= 40 & c <= 80", "a == 3 & b >=50 & c > 80")
"a == 2 & b >= 100 & c >= 40 & c <= 80", "a == 2 & b >=100 & c > 80",
"a == 3 & b >= 100 & c >= 40 & c <= 80", "a == 3 & b >=100 & c > 80")

So I need every subset to be created and joined with the "&" sign but I don't want to be comparing any element in the same vector. I also have three vectors in this example but the number of vectors should be variable. Does anyone know how to achieve this? Thanks!

We can create strings using expand.grid and combn . Create a combn of list ('lst') elements picking 2 or 3 in a list (using lapply ), expand the list elements into a data.frame and paste with do.call (specifying the sep as " & " )

lst <- list(q w, t)
unlist( lapply(2:3, function(i) combn(lst, i, 
    FUN = function(x) do.call(paste, c(expand.grid(x), sep = " & ")), 
         simplify = FALSE)))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM