Разбить каждый другой элемент вектора и поместить в матрицу или фрейм данных - PullRequest
0 голосов
/ 02 марта 2020

У меня есть пары элементов, в которых мне нужно разбить каждый второй элемент на несколько элементов, разделенных запятыми, и сложить их в два измерения, причем первый элемент повторяется столько раз, сколько необходимо:

v <- c("Cha, Seungman", "1,2", "Jin, Yan", "3")

(числа пар элементов и элементов, разделенных запятыми, может быть больше 2.)

Мне нужно:

     [,1]            [,2] 
[1,] "Cha, Seungman" "1"
[2,] "Cha, Seungman" "2"
[3,] "Jin, Yan"      "3"  

(Вывод фрейма данных также хорош.)

Ответы [ 2 ]

5 голосов
/ 02 марта 2020
library(dplyr)
library(tidyr)
as.data.frame(do.call(cbind, split(v, c("nm", "val")))) %>%
    separate_rows("val", sep = ",")
2 голосов
/ 02 марта 2020

Используя базу R, вы можете использовать векторную переработку для выбора альтернативных элементов. Разделите число на запятую (,) и cbind их.

do.call(rbind, Map(cbind, v[c(TRUE, FALSE)], strsplit(v[c(FALSE, TRUE)], ",")))

#     [,1]            [,2]
#[1,] "Cha, Seungman" "1" 
#[2,] "Cha, Seungman" "2" 
#[3,] "Jin, Yan"      "3" 
...