Я бы сделал это, используя различные функции tidyr
.Я создал несколько примеров данных с записями, которые меняются местами и пропускаются.
library(tidyverse)
df %>%
rowid_to_column("row") %>%
separate_rows(V1, sep = "\\|") %>%
mutate(V1 = str_replace(V1, ",$", "")) %>%
separate(V1, c("key", "value"), sep = ":") %>%
spread(key, value, fill = NA)
# row Color ID Location Shape Texture Video-Status
#1 1 Red 1323 Canada Circular Rough Yes
#2 2 Red 1323 Canada Circular Rough Yes
#3 3 Red 1323 Canada Circular Rough <NA>
Объяснение: Сначала мы разделяем записи на разные строки, разделяя записи на "|"
, удаляя конечные значения ","
, разделяя записи на разные столбцы с помощьюразделение записей на ":"
и, наконец, изменение формы с длинного на широкое для получения ожидаемого результата.
Пример данных
df <- read.table(text =
"Color:Red,|Texture:Rough,|Shape:Circular,|ID:1323,|Location:Canada,|Video-Status:Yes
Texture:Rough,|Color:Red,|Shape:Circular,|ID:1323,|Location:Canada,|Video-Status:Yes
Texture:Rough,|Color:Red,|Shape:Circular,|ID:1323,|Location:Canada")