簡體   English   中英

R 將列表轉換為矩陣

[英]R Convert list to matrix

我正在嘗試從一組字符列表創建一個矩陣,如下所示:

list <- list("0010","0110","1000")

我想將其轉換為具有 4 列(對於列表中每個元素的每個字符)和 3 行的矩陣,例如:

在此處輸入圖片說明

現在我需要將數字(0 和 1)識別為數字。

謝謝你的幫助!

使用我的數據輸出進行編輯,我現在可以看到為什么會出現該錯誤。 順便說一句,非常感謝您提供答案。 看起來在使用掃描功能時,它也將文件名添加到列表中(我不知道如何解決這個問題:

第一個元素

第二個元素

從您的問題來看,您實際上是要使用列表還是向量還不是很清楚; 另外,我會避免將變量命名為與list等函數名稱相同的名稱。 以下是您可以解決的方法:

# Try it with l as a list
l <- list("0010","0110","1000")
t(sapply(l, function(x) as.numeric(unlist(strsplit(x, '')))))
#>      [,1] [,2] [,3] [,4]
#> [1,]    0    0    1    0
#> [2,]    0    1    1    0
#> [3,]    1    0    0    0
# Try it with l as a vector
l <- c("0010","0110","1000")
t(sapply(l, function(x) as.numeric(unlist(strsplit(x, '')))))
#>      [,1] [,2] [,3] [,4]
#> 0010    0    0    1    0
#> 0110    0    1    1    0
#> 1000    1    0    0    0

reprex 包(v0.2.1) 於 2018 年 11 月 9 日創建

解釋

sapply(x, fun)將函數fun應用於x每個元素。 所以,

sapply(l, function(x) as.numeric(unlist(strsplit(x, ''))))

獲取l每個元素,使用strsplit(x, '')從該元素中獲取每個單獨的字符(每個"0""1" ),然后我們必須unlist()因為strsplit()返回一個列表,換as.numeric()因為你想要數字,我們必須將所有這些都包裝在t()因為當sapply()返回一個矩陣時,它是按列進行的。

更新

從您更新的問題來看,您的列表元素似乎根本不是字符形式。 在這種情況下,我會遵循現已刪除的答案的建議並使用Reduce()rbind()

l <- list('digist/test_digits/0_0.txt' = c(0, 0, 1, 0),
          'digist/test_digits/0_1.txt' = c(0, 1, 1, 0),
          'digist/test_digits/1_1.txt' = c(1, 0, 0, 0))
l
#> $`digist/test_digits/0_0.txt`
#> [1] 0 0 1 0
#> 
#> $`digist/test_digits/0_1.txt`
#> [1] 0 1 1 0
#> 
#> $`digist/test_digits/1_1.txt`
#> [1] 1 0 0 0
Reduce('rbind', l)
#>      [,1] [,2] [,3] [,4]
#> init    0    0    1    0
#>         0    1    1    0
#>         1    0    0    0

reprex 包(v0.2.1) 於 2018 年 11 月 9 日創建

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM