首先,我一生中从未编写过任何东西,本周我只是在学习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
具有其余列的t
ranpospos,最后删除带有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)