r语言 - 如何将矩阵转置为第二列,而第一列是第一个元素



首先,我一生中从未编写过任何东西,本周我只是在学习R。 我不确定标题是否清晰,但我想显示我的问题更容易: 假设我有这个矩阵 (m(:

[,1] [,2] [,3] [,4]
[1,]    A    1    2    3
[2,]    B    1    4
[3,]    C    3

基本上 A 包含 1、2 和 3,B 包含 1 和 4,依此类推。 我将如何在只有 2 列的矩阵中显示它?

[,1] [,2]
[1,]    A    1
[2,]    A    2
[3,]    A    3
[4,]    B    1
[5,]    B    4
[6,]    C    3

多谢!

假设显示的空白是NA的,则用rowSums获取每行的NA元素计数,cbind基于"n"的rep列,同时t省略NA后删除其余列

n <- rowSums(!is.na(m1[,-1]))
cbind(rep(m1[,1], n), na.omit(c(t(m1[,-1]))))
#   [,1] [,2]
#[1,] "A"  "1" 
#[2,] "A"  "2" 
#[3,] "A"  "3" 
#[4,] "B"  "1" 
#[5,] "B"  "4" 
#[6,] "C"  "3" 

或者稍微紧凑一点的选项是复制具有col索引的第一列,cbind具有其余列的tranpospos,最后删除带有na.omit

na.omit(cbind(m1[,1][col(m1[,-1])], c(t(m1[,-1]))))
#   [,1] [,2]
#[1,] "A"  "1" 
#[2,] "A"  "2" 
#[3,] "A"  "3" 
#[4,] "B"  "1" 
#[5,] "B"  "4" 
#[6,] "C"  "3" 

注意:matrix不能有多个列类型。 因此,如果存在字符类,则所有元素都将转换为character

数据

m1 <- structure(c("A", "B", "C", "1", "1", "3", "2", "4", NA, "3", 
NA, NA), .Dim = 3:4)

最新更新