/ / Разделен кадър от данни на базата на една колона в r, с колона с нефиксирана ширина [дубликат] - r, dataframe, reshape

Разделен график за данни, основан на една колона в r, с колона без фиксирана ширина [duplicate] - r, dataframe, reshape, tidyr

Имам проблем, който е продължение на добре обхванат въпрос тук за SE. тоест:

Разделете колона от рамка с данни на няколко колони

Моите данни съдържат колона със струнен формат, разделени със запетая, но без фиксирана дължина.

data = data.frame(id = c(1,2,3), treatments = c("1,2,3", "2,3", "8,9,1,2,4"))

Така че бих искал в моя Dataframe в крайна сметка да бъде в правилната подредена / дълга форма на:

id    treatments
1     1
1     2
1     3
...
3     1
3     2
3     4

Нещо като separate или strsplit не изглежда да е собствено решение. Отделно се проваля с предупреждения, че различните колони имат твърде много стойности (NB id 3 има повече стойности от id 1).

Благодаря

Отговори:

2 за отговор № 1

Можеш да използваш tidyr::separate_rows:

library(tidyr)
separate_rows(data, treatments)

#   id treatments
#1   1          1
#2   1          2
#3   1          3
#4   2          2
#5   2          3
#6   3          8
#7   3          9
#8   3          1
#9   3          2
#10  3          4

0 за отговор № 2

Използвайки dplyr и tidyr пакети:

data  %>%
separate(treatments, paste0("v", 1:5)) %>%
gather(var, treatments, -id) %>%
na.exclude %>%
select(id, treatments) %>%
arrange(id)


id treatments
1   1          1
2   1          2
3   1          3
4   2          2
5   2          3
6   3          8
7   3          9
8   3          1
9   3          2
10  3          4

0 за отговор № 3

Можете също така да използвате unnest:

library(tidyverse)
data %>%
mutate(treatments = stringr::str_split(treatments, ",")) %>%
unnest()

id treatments
1   1          1
2   1          2
3   1          3
4   2          2
5   2          3
6   3          8
7   3          9
8   3          1
9   3          2
10  3          4