这是我试图转动的数据框,或者更确切地说,重塑:
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")
Run Code Online (Sandbox Code Playgroud)
这是期望的结果(基本上只是将元素组合在一起Value以获得一个大list的结果Value):
Value Word list
1 c("cat", "dog", "apple", "banana")
2 c("cat", "dog", "peach", "orange")
3 c("cat", "dog", "berries", "coconut")
Run Code Online (Sandbox Code Playgroud)
提前感谢能够提供帮助的任何人(并感谢所有已为我评论/编辑过我糟糕帖子的人).
为了让你知道为什么我在数据框中得到一个列表,我实际上是在做一个词性标注.在使用str_split分解注释列之后,我在数据框中得到了一个列表,因为每个注释的长度各不相同.每个评论都带有一个分数,我需要按分数创建一个单词数据框.
根据您的要求,> str(df1):
'data.frame': 6 obs. of 2 variables:
$ Value : num 1 1 2 2 3 3
$ Wordlist:List of 6
..$ : chr "cat" "dog"
..$ : chr "apple" "banana"
..$ : chr "cat" "dog"
..$ : chr "peach" "orange"
..$ : chr "cat" "dog"
..$ : chr "berries" "coconut"
..- attr(*, "class")= chr "AsIs"
Run Code Online (Sandbox Code Playgroud)
并且> dput(df1):
structure(list(Value = c(1, 1, 2, 2, 3, 3), Wordlist = structure(list(
c("cat", "dog"), c("apple", "banana"), c("cat", "dog"), c("peach",
"orange"), c("cat", "dog"), c("berries", "coconut")), class = "AsIs")), .Names = c("Value", "Wordlist"), row.names = c(NA, -6L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)
我在这里使用data.table:
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
Run Code Online (Sandbox Code Playgroud)
unlist递归地工作以将每个元素Word.list内的所有元素拉Value入单个向量中.然后我们将这些返回给a list,最后将所有内容包装在一个named中list以创建该列(list由于.其名称相同,因此名称被屏蔽data.table).可以使用,list(word_list=...)但我认为单词列表已经足够注意一个答案.
Base R解决方案,使用@ akrun的数据设置:
aggregate(df1$Wordlist,list(df1$Value),unlist,simplify=FALSE)
Run Code Online (Sandbox Code Playgroud)
如果重要的话,其他解决方案可能会更快.
我们也可以使用 dplyr/tidyr
library(dplyr)
library(tidyr)
unnest(df1, Wordlist) %>%
group_by(Value) %>%
nest(Wordlist)
Run Code Online (Sandbox Code Playgroud)
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"))))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
396 次 |
| 最近记录: |