[英]create list from characters in R tibble
我有一個帶有字符列的小標題。 每行中的字符是一組像這樣的單詞:“type:mytype,variable:myvariable,variable:myothervariable:asubvariableofthisothervariable”。 像這樣的東西。 我想將其轉換為我的 tibble 中的列(列“類型”、列“變量”等;但是我真的不知道如何處理我的 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
我們可以使用tidyr
中的separate_rows
將“關鍵字”列拆分為,
,然后使用cSplit
將“關鍵字”列拆分為:
處的多個列,使用pivot_wider
重塑為“long”格式,然后使用pivot_longer
重塑回“wide”
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"))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.