Leprechault
Leprechault

Reputation: 1823

Combinations using expand.grid in vector

I'd like to use expand.grid in vector to create all the combinations of the factors in myvec, in a specific format and without duplicates. I try to:

myvec <- c("B2","B3","B4","B8","NDVI","SAVI","SIPI","SR","RGI","TVI",
   "MSR","PRI","GNDVI","PSRI","GCI") 
grid <- expand.grid(c(rep(myvec,length(myvec))), KEEP.OUT.ATTRS = FALSE, stringsAsFactors = FALSE)
grid 
#      Var1
# 1      B2
# 2      B3
# 3      B4
# 4      B8
# 5    NDVI

But, doesn't work and my desirable output is:

grid 
#      Var1
# 1      B2_B3
# 2      B2_B4
# 3      B2_B8
# ...
# last B2_B3_B4_B8_NDVI_SAVI_SIPI_SR_RGI_TVI_MSR_PRI_GNDVI_PSRI_GCI

Please, any help with it?

Upvotes: 1

Views: 184

Answers (1)

akrun
akrun

Reputation: 886948

If we need to create a single string for combinations from 2 to the length of 'myvec', use combn

grid <- data.frame(Var1 = unlist(lapply(2:length(myvec), \(i) 
     combn(myvec, i, FUN = paste, collapse = "_"))))

-output

> head(grid)
     Var1
1   B2_B3
2   B2_B4
3   B2_B8
4 B2_NDVI
5 B2_SAVI
6 B2_SIPI
> tail(grid)
                                                              Var1
32747      B2_B3_B4_B8_SAVI_SIPI_SR_RGI_TVI_MSR_PRI_GNDVI_PSRI_GCI
32748    B2_B3_B4_NDVI_SAVI_SIPI_SR_RGI_TVI_MSR_PRI_GNDVI_PSRI_GCI
32749    B2_B3_B8_NDVI_SAVI_SIPI_SR_RGI_TVI_MSR_PRI_GNDVI_PSRI_GCI
32750    B2_B4_B8_NDVI_SAVI_SIPI_SR_RGI_TVI_MSR_PRI_GNDVI_PSRI_GCI
32751    B3_B4_B8_NDVI_SAVI_SIPI_SR_RGI_TVI_MSR_PRI_GNDVI_PSRI_GCI
32752 B2_B3_B4_B8_NDVI_SAVI_SIPI_SR_RGI_TVI_MSR_PRI_GNDVI_PSRI_GCI

Upvotes: 1

Related Questions