R 透视包含列表的数据帧
这是我试图改变的数据框架,或者更确切地说,重塑:R 透视包含列表的数据帧,r,R,这是我试图改变的数据框架,或者更确切地说,重塑: Value Word list 1 c("cat", "dog") 1 c("apple", "banana") 2 c("cat", "dog") 2 c("peach", "orange") 3 c("cat", "dog") 3 c("berries", "coconut") 下面是
Value Word list
1 c("cat", "dog")
1 c("apple", "banana")
2 c("cat", "dog")
2 c("peach", "orange")
3 c("cat", "dog")
3 c("berries", "coconut")
下面是期望的结果(基本上只是将具有相同值的元素组合在一起,通过值
得到一个大的列表
):
提前感谢所有能够提供帮助的人(也感谢所有已经为我评论/编辑了我可怜的帖子的人)
为了让你们知道为什么我在数据框中得到一个列表,我实际上在做词性标记。在使用str_split分解注释列之后,我在数据框中得到了一个列表,因为每个注释的长度都不同。每个评论都有一个分数,我需要根据分数创建一个单词包数据框
根据您的请求,>str(df1):
和>dput(df1):
这里我使用了数据。表:
library(data.table); setDT(df)
df[, .(word_list = list(unlist(Word.list))), by = Value]
# Value word_list
# 1: 1 cat,dog,apple,banana
# 2: 2 cat,dog,peach,orange
# 3: 3 cat,dog,berries,coconut
unlist
递归地将每个Value
中的Word.list
的所有元素拉入一个向量。然后我们将它们返回到列表
,最后将所有内容包装在命名的列表
中以创建列(命名的列表
被屏蔽,因为
与数据表
相同)。本可以使用list(word\u list=…)
但我认为单词列表已经足够关注一个答案了。我们也可以使用dplyr/tidyr
library(dplyr)
library(tidyr)
unnest(df1, Wordlist) %>%
group_by(Value) %>%
nest(Wordlist)
数据
df1Base R解决方案,使用@akrun的数据设置:
aggregate(df1$Wordlist,list(df1$Value),unlist,simplify=FALSE)
如果这很重要,其他解决方案可能会更快。@zx8754您好,因为拼写问题,4张反对票?我甚至不是以英语为母语的人。。。为什么这么严格?为什么我不能提前感谢别人呢?欢迎来到StackOverflow!请阅读相关信息以及如何给出建议。这将使其他人更容易帮助你。我怀疑落选是因为拼写错误。我试图使这篇文章更具可读性,简洁,没有杂乱(是的,这包括“谢谢”,请随意回复原文)。还是在我编辑之后,你的帖子并没有达到一篇好帖子的最低要求。阅读上面评论的帖子。是的,用最低要求更新你的帖子,你很可能会得到答案。在您的帖子更新之前,被否决的用户不能向上投票。如果您可以显示str(您的_数据)
或dput(您的_数据)
,这将非常有用;包含列表的数据帧在R中是不常见的,正确的答案实际上取决于数据的实际结构@罗尔试图猜测@michaelchirico,你是如何设置df的?
library(data.table); setDT(df)
df[, .(word_list = list(unlist(Word.list))), by = Value]
# Value word_list
# 1: 1 cat,dog,apple,banana
# 2: 2 cat,dog,peach,orange
# 3: 3 cat,dog,berries,coconut
library(dplyr)
library(tidyr)
unnest(df1, Wordlist) %>%
group_by(Value) %>%
nest(Wordlist)
df1 <- data.frame(Value = c(1, 1, 2, 2, 3, 3),
Wordlist = I(list(c('cat', 'dog'), c("apple", "banana") ,
c("cat", "dog") , c("peach", "orange") , c("cat", "dog") ,
c("berries", "coconut"))))
aggregate(df1$Wordlist,list(df1$Value),unlist,simplify=FALSE)