这是我试图转动的数据框,或者说是重塑:
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
的元素组合起来,以list
获得一个大Value
}:
Value Word list
1 c("cat", "dog", "apple", "banana")
2 c("cat", "dog", "peach", "orange")
3 c("cat", "dog", "berries", "coconut")
提前感谢能够提供帮助的任何人(感谢所有已为我评论/编辑过我可怜的帖子的人)。
为了让您知道为什么我在数据框中获取列表,我实际上正在进行词性标注。在使用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"
并且> 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")
答案 0 :(得分:6)
我在这里使用了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
unlist
递归地将每个Word.list
中的Value
的所有元素都拉到一个向量中。然后我们将这些返回到list
,最后将所有内容包装在命名的list
中以创建列(名称list
被屏蔽,因为.
与{data.table
相同1}})。本来可以使用list(word_list=...)
,但我认为单词列表已经得到了足够的关注,只有一个答案。
答案 1 :(得分:6)
Base R解决方案,使用@ akrun的数据设置:
aggregate(df1$Wordlist,list(df1$Value),unlist,simplify=FALSE)
如果重要的话,其他解决方案可能会更快。
答案 2 :(得分:5)
我们也可以使用dplyr/tidyr
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"))))