2016-12-14 72 views
0

我有一個列表類似於下面的一個:轉化列表合併常見類別

# Initial object 
vec <- c("levelA-1", "levelA-2", "levelA-3", 
     "levelB-1", "levelB-2", "levelB-3") 
lstVec <- strsplit(x = vec, split = "-") 

我想在下面的結構的列表到達:

lstRes <- list(levelA = list(1:3), 
       lvelB = list(1:3)) 

該清單具有以下特徵:

  • 第一級元件被轉換成不同的列表經由strsplit創建
  • 第二級元件是那些列表

回答

5

這個足夠的元素:

mat <- do.call(rbind, lstVec)  
result <- split(mat[,2], mat[,1]) 

do.callrbindlstVec由結果排成一個矩陣(感謝G. Grothendieck指出這不是數據幀),那麼split分割爲mat[,2]mat[,1]

正如Aaron所說,ti有點奇怪,你想要嵌套列表。但你可以得到它

lapply(result, as.list) 

我不知道rbind有多好。但另一種方式來獲得mat

mat <- matrix(unlist(lstVec), ncol = 2, byrow = TRUE) 
+0

要在列表中的每個元素(這實際上可能沒有在OP想要的東西,這是一個有點古怪),你還必須給每個元素轉換爲與lapply列表。 – Aaron

+1

增加一點評論來解釋它的作用也很有幫助。歡迎來到SO! – Aaron