Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 从列创建布尔表达式_R - Fatal编程技术网

R 从列创建布尔表达式

R 从列创建布尔表达式,r,R,我有这样一个数据框: set1,set2,set3 "test1","test12","test13" "test2","test22","test23" 我想创建基于所有列的所有可能组合的布尔表达式,并使用第一列作为基础 基于上述df的输出示例: ("test1" AND "test12" AND "test13") ("test1" AND "test22" AND "test23") ("test2" AND "test12" AND "test13") ("test2" AND "te

我有这样一个数据框:

set1,set2,set3
"test1","test12","test13"
"test2","test22","test23"
我想创建基于所有列的所有可能组合的布尔表达式,并使用第一列作为基础

基于上述df的输出示例:

("test1" AND "test12" AND "test13")
("test1" AND "test22" AND "test23")
("test2" AND "test12" AND "test13")
("test2" AND "test22" AND "test23")
有什么简单的方法吗?我试过这个:

set1 <- read.csv("C:/Users/Desktop/set.csv", header=TRUE, sep=",")

df <- data.frame()

i <- 1

for (i in 1:nrow(set1$set1)) {
j <- 1
for (j in 1:nrow(set1$set2)) {
k <- 1
for (k in 1:nrow(set1$set3)) {
df <- paste(set1$set1[i]," AND ",set1$set2[j]," AND ", set1$set3[k])
}
}
}

set1一个想法是,首先我们创建一个新列来粘贴
set2
set3
,以避免出现
(“test1”和“test22”以及“test13”)之类的字符串。然后,我们通过
expand.grid
paste
创建组合,即

df1$new <- do.call(paste, c(df1[,(2:3)], sep = ' AND '))
do.call(paste, c(expand.grid(df1[,-(2:3)]), sep = ' AND '))
#[1] "test1 AND test12 AND test13" "test2 AND test12 AND test13" "test1 AND test22 AND test23" "test2 AND test22 AND test23"
数据

dput(df1)
structure(list(set1 = c("test1", "test2"), set2 = c("test12", 
"test22"), set3 = c("test13", "test23")), .Names = c("set1", 
"set2", "set3"), class = "data.frame", row.names = c(NA, -2L))
编辑 由于您希望在每个
“test”
周围保留引号,因此

#as before,
v1 <- do.call(paste, c(expand.grid(df1), sep = ' AND '))
v2 <- paste0('(', sapply(lapply(strsplit(v1, ' AND '), function(i) dQuote(i)), 
                                         function(j) paste(j, collapse = ' AND ')), ')')

#1 (“test1” AND “test12” AND “test13”)
#2 (“test2” AND “test12” AND “test13”)
#3 (“test1” AND “test22” AND “test13”)
#4 (“test2” AND “test22” AND “test13”)
#5 (“test1” AND “test12” AND “test23”)
#6 (“test2” AND “test12” AND “test23”)
#7 (“test1” AND “test22” AND “test23”)
#8 (“test2” AND “test22” AND “test23”)
#如前所述,

v1有什么我应该更新的问题吗?
(“test1”和“test22”以及“test13”)怎么样?
?谢谢。我尝试了所有组合的命令。只有一个问题,我认为结果“test1和test12和test13”与我的示例输出不同(“test1”和“test22”和“test13”)
哦,你也希望它用括号括起来,并在每个“test”周围加引号?是的,因为它们是不同的表达式
#as before,
v1 <- do.call(paste, c(expand.grid(df1), sep = ' AND '))
v2 <- paste0('(', sapply(lapply(strsplit(v1, ' AND '), function(i) dQuote(i)), 
                                         function(j) paste(j, collapse = ' AND ')), ')')

#1 (“test1” AND “test12” AND “test13”)
#2 (“test2” AND “test12” AND “test13”)
#3 (“test1” AND “test22” AND “test13”)
#4 (“test2” AND “test22” AND “test13”)
#5 (“test1” AND “test12” AND “test23”)
#6 (“test2” AND “test12” AND “test23”)
#7 (“test1” AND “test22” AND “test23”)
#8 (“test2” AND “test22” AND “test23”)