我正在处理json数据,这些数据已转换为带有一些列表列的小标题。我正在尝试从列表列中提取有用的信息,但遇到了问题。如果给出以下数据集-
mydf <-tibble(
x = c(1, 2, 3),
y = list(list(list(id="id1", title="title1"), list(id="id11", title="title11")),
list(id="id2",title="title2"),
NULL)
)
如何将其转换为以下内容?
data.frame(x=c(1:3), id = c("id1;id11", "id2", ""), title = c("title1;title11", "title2", ""))
# x id title
#1 1 id1;id11 title1;title11
#2 2 id2 title2
#3 3
感谢您的帮助。谢谢!
答案 0 :(得分:2)
我认为有更好的方法,但这是我目前可以做的。对于每一行,我提取字符串并将其与toString()
串联在一起。由于unnest()
为每一行创建多行(即x中的1、2和3),因此我使用summarize()
来临时组合字符串。然后,我使用separate()
将它们分开。
mydf %>%
unnest(y, keep_empty = TRUE) %>%
rowwise %>%
mutate(y = toString(unlist(y))) %>%
group_by(x) %>%
summarize(string = paste(y, collapse = "_")) %>%
separate(col = string, into = c("id", "title"), sep = "_")
# x id title
# <dbl> <chr> <chr>
#1 1 id1, title1 id11, title11
#2 2 id2 title2
#3 3 "" NA
答案 1 :(得分:0)
如果名称与示例中的名称一致,则可以执行以下操作:
mydf2 <- unlist(mydf)
x <- mydf2[grepl("x", names(mydf2))]
id <- mydf2[grepl("id", names(mydf2))]
title <- mydf2[grepl("title", names(mydf2))]
tibble(x, id, title)
# A tibble: 3 x 3
x id title
<chr> <chr> <chr>
1 1 id1 title1
2 2 id11 title11
3 3 id2 title2