Создать список из символов в таблице R

У меня есть табличка со столбцом символов. Символ в каждой строке представляет собой набор таких слов: «тип:мойтип,переменная:мояпеременная,переменная:моядругаяпеременная:подпеременнаяэтойдругойпеременной». Такие вещи. Я хочу либо преобразовать это в столбцы в моей таблице (столбец «тип», столбец «переменная» и т. д., но тогда я действительно не знаю, что делать с моими словами 3-го уровня), либо преобразовать его в список столбцов x, так что x имеет структуру подсписков: x$type, x$variable, x$variable$myothervariable.

Я не уверен, что это лучший подход, но также я не знаю, как реализовать эти два подхода, которые я предлагаю здесь. Я должен сказать, что у меня максимум 3 уровня и больше слов 1-го уровня, чем «тип» и «переменная».

Небольшой воспроизводимый пример:

df <- tibble()
df$id<- 1:3
df$keywords <- c(
  "type:novel,genre:humor:black,year:2010"
  "type:dictionary,language:english,type:bilingual,otherlang:french"
  "type:essay,topic:philosophy:purposeoflife,year:2005"
)

# expected would be in idea 1: 
colnames(df)
# n, keywords, type, genre, year, 
# language, otherlang, topic

# on idea 2:
colnames(df)
# n, keywords, keywords.as.list

Можете ли вы показать небольшой воспроизводимый пример и ожидаемый результат. Спасибо

akrun 20.12.2020 20:10
Почему в Python есть оператор &quot;pass&quot;?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
1
243
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мы можем использовать separate_rows из tidyr, чтобы разделить столбец «ключевые слова» на ,, затем с помощью cSplit разделить столбец «ключевые слова» на несколько столбцов в :, изменить форму в «длинный» формат с помощью pivot_longer, а затем снова изменить форму на «широкий» с помощью pivot_wider

library(dplyr)
library(tidyr)
library(data.table)
library(splitstackshape)
df %>% 
   separate_rows(keywords, sep = ",") %>%
   cSplit("keywords", ":") %>% 
   pivot_longer(cols = keywords_2:keywords_3, values_drop_na = TRUE) %>% 
   select(-name) %>%
   mutate(rn = rowid(id, keywords_1)) %>%
   pivot_wider(names_from = keywords_1, values_from = value) %>%
   select(-rn) %>%
   type.convert(as.is = TRUE)

-выход

# A tibble: 6 x 7
#     id type       genre  year language otherlang topic        
#  <int> <chr>      <chr> <int> <chr>    <chr>     <chr>        
#1     1 novel      humor  2010 <NA>     <NA>      <NA>         
#2     1 <NA>       black    NA <NA>     <NA>      <NA>         
#3     2 dictionary <NA>     NA english  french    <NA>         
#4     2 bilingual  <NA>     NA <NA>     <NA>      <NA>         
#5     3 essay      <NA>   2005 <NA>     <NA>      philosophy   
#6     3 <NA>       <NA>     NA <NA>     <NA>      purposeoflife

данные

df <- structure(list(id = 1:3, keywords = c("type:novel,genre:humor:black,year:2010", 
"type:dictionary,language:english,type:bilingual,otherlang:french", 
"type:essay,topic:philosophy:purposeoflife,year:2005")), row.names = c(NA, 
-3L), class = c("tbl_df", "tbl", "data.frame"))

Другие вопросы по теме