在R中按计数合并数据帧

jbe*_*est 2 merge r subset

我有两个数据框如下.

set.seed(12345)

df1 <- data.frame(
  y1 = sample(rep(c(0:1),length.out = 50)),
  y2 = sample(rep(c(0:1),length.out = 50)),
  y3 = sample(rep(c(0:1),length.out = 50)),
  y4 = sample(rep(c(0:1),length.out = 50)),
  y5 = sample(rep(c(0:1),length.out = 50)),
  y6 = sample(rep(c(0:1),length.out = 50))
)

df2 <- data.frame(x = c("y1","y2","y1:y2","y2:y3:y4","y5","y6"))
Run Code Online (Sandbox Code Playgroud)

我想合并这两个数据框,但合并的结果将显示每个元素的"1"的计数.我的另一个问题是,在第二个数据框中,有些列有多个以":"分隔的元素.这将使我很难自动执行此操作.下面是我想要实现的表格

        x count
1       y1    25
2       y2    25
3    y1:y2    11
4 y2:y3:y4     8
5       y5    25
6       y6    25
Run Code Online (Sandbox Code Playgroud)

akr*_*run 6

我们可以得到'df1'的列明智总和colSums.识别已经的"x"的元件:使用grep.然后,我们split基于索引('i1')的'x'列,每个list元素中的'df1'列的子集,使用Reduce,&以便我们只有TRUE当同一行中的所有元素都是1 时才获得.获取sum,和根据创建的'v1'对象创建'count'列.

v1 <- colSums(df1)
i1 <- grep(':', df2$x)
v1[i1] <- sapply(strsplit(as.character(df2$x[i1]), ':'), 
           function(x) sum(Reduce(`&`,df1[x])))
df2$count <- v1
Run Code Online (Sandbox Code Playgroud)

  • 好的解决方案 想到类似的东西. (2认同)