gpt4 book ai didi

r - 从列表中获取长格式数据框

转载 作者:行者123 更新时间:2023-12-03 21:09:56 26 4
gpt4 key购买 nike

我有一个包含字符串的列表列表。每个子列表的第一个字符串描述了以下字符串所属的类别。我想获得一个(长格式)数据框,其中一列用于类别,一列用于内容。
如何从此列表中获取长格式的数据框:

mylist <- list(
c("A","lorem","ipsum"),
c("B","sed", "eiusmod", "tempor" ,"inci"),
c("C","aliq", "ex", "ea"))

> mylist
[[1]]
[1] "A" "lorem" "ipsum"

[[2]]
[1] "B" "sed" "eiusmod" "tempor" "incidunt"

[[3]]
[1] "C" "aliquid" "ex" "ea"

它应该看起来像这个数据框
mydf <- data.frame(cate= c("A","A","B","B","B","B","C","C","C"),
cont= c("lorem","ipsum","sed", "eiusmod", "tempor","inci","aliq", "ex", "ea"))

> mydf
cate cont
1 A lorem
2 A ipsum
3 B sed
4 B eiusmod
5 B tempor
6 B incidunt
7 C aliquid
8 C ex
9 C ea

我已经把类别和内容分开了。
cate <- sapply(mylist, "[[",1)
cont <- sapply(mylist, "[", -(1))

如何继续获得mydf?

最佳答案

使用您的原始列表而不是您创建的拆分对象,您可以尝试以下操作:

library(data.table)
setorder(melt(as.data.table(transpose(mylist)),
id.vars = "V1", na.rm = TRUE), V1, variable)[]
# V1 variable value
# 1: A V2 lorem
# 2: A V3 ipsum
# 3: B V2 sed
# 4: B V3 eiusmod
# 5: B V4 tempor
# 6: B V5 inci
# 7: C V2 aliq
# 8: C V3 ex
# 9: C V4 ea

为了好玩,您还可以尝试以下方法之一:
library(dplyr)
library(tidyr)

data_frame(id = seq_along(mylist), mylist) %>%
unnest %>%
group_by(id) %>%
mutate(ind = mylist[1]) %>%
slice(2:n())
library(purrr)
data_frame(
value = mylist %>% map(~ .x[-1]) %>% unlist,
ind = mylist %>% map(~ rep(.x[1], length(.x)-1)) %>% unlist
)

请注意,“purrr”也有 transpose 的事实会让您感到恼火。函数,这意味着如果你也加载了“data.table”,你将不得不养成使用 data.table::transpose 之类的习惯。或 purrr::transpose如果您正在使用这些功能(就像我在原始答案中所做的那样)。我还没有测试过,但我的猜测是“data.table”仍然是原始列表中最快的。

关于r - 从列表中获取长格式数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35360917/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com