Как вывести один вектор для матрицы или фрейма данных, в котором каждый элемент представляет собой строку, соединенную из каждой строки? - PullRequest
1 голос
/ 27 апреля 2020

У меня есть матрица (или фрейм данных):

m1 <- matrix(letters[1:8], ncol = 2, byrow=TRUE)

     [,1] [,2]
[1,] "a"  "b" 
[2,] "c"  "d" 
[3,] "e"  "f" 
[4,] "g"  "h" 

Желаемый вывод:

vec1 = c("ab", "cd", "ef", "gh")

Я бы предпочел, чтобы это работало для матрицы любого размера столбца или строки. База R и dplyr оценены.

1 Ответ

1 голос
/ 27 апреля 2020

Мы можем либо преобразовать в data.frame, а затем paste с do.call

do.call(paste, c(as.data.frame(m1), sep=''))
#[1] "ab" "cd" "ef" "gh"

или менее эффективным вариантом будет apply

apply(m1, 1, paste, collapse = '')

С tidyverse мы можем использовать reduce с str_c

library(dplyr)
library(purrr)
library(stringr)
as_tibble(m1) %>% 
    reduce(str_c, sep="")
 #[1] "ab" "cd" "ef" "gh"

Или, если есть только два столбца, извлечь столбцы по индексу и использовать paste0

paste0(m1[,1], m1[,2])

Или с помощью asplit, разделите матрицу по столбцу на list из vector с и затем используйте do.call

do.call(paste, c(asplit(m1, 2), sep=''))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...