首先,
我想从此转换我的数据:
d <- data.table(
person_id=1:10,
cat=letters[1:10],
group_id=c(rep(1,5),rep(2,5))
)
进入这个:
d_grouped <- data.table(
group_id=1:2
)
d_grouped$Cat_grouped <- list(letters[1:5],letters[6:10] )
即。将我的数据分组,从人员级别到组级别,但将各个特征的信息保存到包含每个组的人员级别特征列表的列中。
我该如何进行聚合?
最好是data.table解决方案。但它也可能是一个正常的data.frame。
第二,
我想在每个组的每个列表中搜索向量元素的存在
类似的东西(我知道这不是正确的语法):
c('a','b') %in% d_grouped$Cat_grouped
应返回另一个列表:
list(c(T,T),c(F,F))
更广泛地说,我正在尝试合并包含向量的列表(A和B)。匹配应基于列表A中向量的元素,列表A中的向量存在于列表B中的向量上。是否存在基于此SubVector逻辑的合并命令?
答案 0 :(得分:4)
完成第一次转型,
d[, list(Cat_grouped=paste0(cat, collapse = ',')), group_id]
要完成第二步,似乎最好的办法是将数据保留为原始形状?毕竟
d[, c('a', 'b') %in% cat, group_id]
返回
group_id V1
1: 1 TRUE
2: 1 TRUE
3: 2 FALSE
4: 2 FALSE
所有这一切都说明你的&#34;更广泛地&#34;似乎在寻找别的东西,我担心这不是我通过回答这两个具体问题而帮助你的。也许你可以提供另一个例子?
答案 1 :(得分:2)
只需在data.table
中执行此操作,然后返回每个by=
组的列表:
d[, .(cat_grouped=.(cat)), by=group_id]
# group_id cat_grouped
#1: 1 a,b,c,d,e
#2: 2 f,g,h,i,j
我倾向于同意@ HarlandMason的回答,你所做的分析并不需要这个中间数据。表。
答案 2 :(得分:1)
使用aggregate
d2 = aggregate(list(cat = d$cat), list(group = d$group_id), function(x)
as.character(x), simplify = FALSE)
d2
# group cat
#1 1 a, b, c, d, e
#2 2 f, g, h, i, j
lapply(d2$cat, function(x) c("a","b") %in% x)
#$`1`
#[1] TRUE TRUE
#$`2`
#[1] FALSE FALSE
还要考虑
mylist = split(d$cat, d$group_id)
答案 3 :(得分:1)
我们也可以使用dplyr
library(dplyr)
d %>%
group_by(group_id) %>%
summarise(cat = list(cat))