计算另一个数据帧中一个数据帧中的值

问题描述 投票:0回答:1

假设我有一个像这样的数据框:

df <- data.frame(
  D = c('A', 'B', 'C'),
  Q = c('asd', 'reg', 'rt'),
  id = I(list(c(124, 532, 78), c(1, 3, 532), c(2, 3, 78, 124, 1)))
)

还有一个这样的:

clusters <- data.frame(
 g = I(list(c(124, 78, 1),c(2, 3, 89),c(532, 533)))
)

我想计算每个 id 列表中的元素在组 g1、g2、g3(簇中的每一行)中的次数(当它不止一次时)。所以基本上只要交集 > 1 就计算交集。

输出应该是:

df <- data.frame(
  D = c('A', 'B', 'C'),
  Q = c('asd', 'reg', 'rt'),
  id = I(list(c(124, 532, 78), c(1, 3, 532), c(2,3,78))),
  count = c(2, 0, 5)
)

我无法使用 for 循环来完成此操作,因为它会花费很长时间,因为我有 70k 行。

for 循环看起来像这样:

for row in df:
  for group in clusters:
     if group intersect row$id > 1
        count=count+intersection
  count=0
r dataframe group-by intersect
1个回答
0
投票

也许你可以试试这个

transform(
    df,
    count = rowSums(outer(id, clusters$g, \(...) mapply(\(...) length(intersect(...)), ...)))
)

这给出了

  D   Q           id count
1 A asd 124, 532, 78     3
2 B reg    1, 3, 532     3
3 C  rt 2, 3, 78....     5
© www.soinside.com 2019 - 2024. All rights reserved.