按R中的计数合并数据帧

按R中的计数合并数据帧,r,merge,subset,R,Merge,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),l

下面有两个数据框

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"))

我们可以使用
colSums
得到'df1'的列式和。使用
grep
识别具有
的“x”元素。然后,我们根据索引('i1')拆分'x'列,在每个
列表
元素中子集'df1'列,使用
Reduce
,这样当同一行中的所有元素都是1时,我们只得到
TRUE
。获取
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

v1您所说的
y1:y2
count是什么意思?您尝试了什么?为什么它不起作用?我认为基于
y1:y2
计数,似乎
y2:y3:y4
应该是4。很好的解决方案。我也在想类似的事情。+1真不错!我想我会把它保持为一行
v1
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