0
假設存在以下情況。有兩個表格,每個表格都有不同質量的數據。它們都具有相同的變量A,B和C.第一個表中的變量稱爲A1,B1和C2,而第二個表中的變量稱爲A2,B2和C2。創建兩個向量的組合
第一個表格可以用第二個表格更新。有六種可能的組合:
A1,B1,C2
A1,B2,C1
A2,B1,C1
A1,B2,C2
A2,B1, C2
A2,B2,C1
問題是如何在R中得到這個結果。我使用的是什麼如下:
require(utils)
require(stringr)
vars <- c("A1", "B1", "C1", "A2", "B2", "C2")
combine <- function(data, n){
com1 = combn(data, n)# make all combinations
com2 = c(str_sub(com1, end=-2L))# remove the number in the end of the name
com3 = matrix(com2, nrow = dim(com1)[1], ncol = dim(com1)[2])# vector to matrix
com3 = split(com3, rep(1:ncol(com3), each = nrow(com3)))# matrix to list
com3 = lapply(com3, duplicated)# find list elements with duplicated names
com3 = lapply(com3, function(X){X[which(!any(X == TRUE))]})# identify duplicated names
pos = which(as.numeric(com3) == 0)# get position of duplicates
com3 = com1[,pos]# return elements from the original list
com3 = split(com3, rep(1:ncol(com3), each = nrow(com3)))# matrix to list
com3 = lapply(com3, sort)# sort by alphabetical order
com3 = as.data.frame(com3, stringsAsFactors = FALSE)# matrix to data frame
res = list(positions = pos, combinations = com3)# return position and combinations
return(res)
}
combine(vars, 3)
$positions
[1] 1 4 6 10 11 15 17 20
$combinations
X1 X2 X3 X4 X5 X6 X7 X8
1 A1 A1 A1 A1 A2 A2 A2 A2
2 B1 B1 B2 B2 B1 B1 B2 B2
3 C1 C2 C1 C2 C1 C2 C1 C2
我想知道,如果有人知道不是創造所有可能的組合和事後清理結果作爲我的函數做了一個更簡單的解決方案。
不錯。我用'expand.grid'欺騙了45分鐘試圖獲得這個。乾杯! –
這是一種可能性。但是如何將字符作爲字符返回?請注意'expand.grid'返回因子。 –
@Alessandro在'expand.grid'調用中設置'stringsAsFactors = FALSE'。 – Thomas