Как транспонировать матрицу во второй столбец, когда первый столбец является первым элементом - PullRequest
1 голос
/ 29 мая 2020

Во-первых, я никогда в жизни ничего не кодировал, а на этой неделе я только изучаю 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

Большое спасибо!

1 Ответ

1 голос
/ 29 мая 2020

Предполагая, что показаны пробелы NA, получите количество элементов NA в строке с помощью rowSums, cbind rep выделенного первого столбца на основе 'n', а t перенесите остальную часть столбцы после исключения NA s

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 смещением остальных столбцов и, наконец, удалить строки NA с помощью 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...