如何获取R中所有可能的字符向量的子集?

如何获取R中所有可能的字符向量的子集?

问题描述:

具有以下矢量:如何获取R中所有可能的字符向量的子集?

c("test1","test2","test3") 

我试图得到一个包含以下条目列表或数据帧:

"test1" "test2" "test3" 
"test1" "test2" NA 
"test1" NA "test3" 
"test1" NA NA 
NA "test2" "test3" 
NA "test2" NA 
NA NA "test3" 

这样做的目的是让所有可能的子集,而订单没有按”不管怎么说,就是“text1”,“text2”NA等同于“text2”,“text1”NA。我非常感谢任何帮助!

+0

'NA'从哪里来? – mtoto

+0

感谢您的提问。这并不重要,但我将它包含在内,因为如果我得到一个数据框,那么需要有一个条目指示该字符串丢失。 –

+0

这些不是所有可能的子集......例如''test1“,NA,NA' missing – digEmAll

您可以使用combn

res <- unlist(lapply(1:3, combn, 
        x = c("test1","test2","test3"), simplify = FALSE), 
       recursive = FALSE) 
res <- sapply(res, `length<-`, 3) 
#  [,1] [,2] [,3] [,4] [,5] [,6] [,7] 
#[1,] "test1" "test2" "test3" "test1" "test1" "test2" "test1" 
#[2,] NA  NA  NA  "test2" "test3" "test3" "test2" 
#[3,] NA  NA  NA  NA  NA  NA  "test3" 

有一个套件与相关功能。

library(sets) 
a <- c("test1","test2","test3") 
set_power(a) 

{{},{ “测试1”},{ “TEST2”},{ “TEST3”},{ “测试1”, “TEST2”},{ “测试1”, “TEST3”} { “TEST2”, “TEST3”},{ “测试1”, “测试2”, “TEST3”}}

这将返回集合中的所有子集。

使用combndata.table ::与填充= TRUE选项rbindlist使NA值。

#data 
a <- c("test1","test2","test3") 

#result 
data.table::rbindlist(
     sapply(1:3, function(i) as.data.frame(t(combn(a, i)))), fill = TRUE) 

#output 
#  V1 V2 V3 
# 1: test1 NA NA 
# 2: test2 NA NA 
# 3: test3 NA NA 
# 4: test1 test2 NA 
# 5: test1 test3 NA 
# 6: test2 test3 NA 
# 7: test1 test2 test3