Имам проблем, който е продължение на добре обхванат въпрос тук за 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