R: объединение записей строк разных столбцов - PullRequest
1 голос
/ 21 января 2020

Я использую R, и у меня есть фрейм данных с двумя столбцами, которые имеют следующий вид:

+-----+-------+
|  IDs| Names |
+-----+-------+
| 1,2 | a,b   |
|3,4,5| c,d,e |
|  .  | .     |
+-----+-------+

В результате я хочу получить следующий фрейм данных:

+-----+-------+
|  IDs| Names |
+-----+-------+
|  1  | a     |
|  2  | b     |
|  3  | c     |
|  4  | d     |
|  5  | e     |
+-----+-------+

Есть предположения?

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

Ответы [ 2 ]

1 голос
/ 21 января 2020
Решение

@ akrun прекрасно, но есть альтернатива без каких-либо дополнительных библиотек:

df1 <- data.frame(IDs = c('1,2', '3,4,5'), Names = c('a,b', 'c,d,e'), stringsAsFactors = FALSE)
df2 <- data.frame(sapply(sapply(df1, paste, collapse = ','), strsplit, ','))

Если вы хотите избежать всего этого в одной строке / как это работает:

step_1 <- sapply(df1, paste, collapse = ',') # squish the columns together into a single string
step_2 <- sapply(step_1, strsplit, ',') # split the new strings into vectors
df2 <- data.frame(step_2) # create a new df from those vectors
1 голос
/ 21 января 2020

Мы можем использовать separate_rows

library(tidyr)
separate_rows(df1, IDs, Names)
#    IDs Names
#1   1     a
#2   2     b
#3   3     c
#4   4     d
#5   5     e

Или с cSplit

library(splitstackshape)
cSplit(df1, c("IDs", "Names"), ",", "long")

data

df1 <- data.frame(IDs = c('1,2', '3,4,5'), Names = c('a,b', 'c,d,e'), 
       stringsAsFactors=FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...