[英]Merge data frame by count in R
我下面有两个数据框。
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"))
我想合并这两个数据帧,但是合并的结果将显示每个要素的“ 1”计数。 我的另一个问题是,在第二个数据帧中,某些列具有多个用“:”分隔的元素。 这将使我很难自动执行此操作。 下面是我要实现的表
x count
1 y1 25
2 y2 25
3 y1:y2 11
4 y2:y3:y4 8
5 y5 25
6 y6 25
我们可以使用colSums
来获取'df1'的列式和。 识别的“x”,其具有的元素:
使用grep
。 然后,我们根据索引('i1') split
'x'列,在每个list
元素中对'df1'列进行子集化,使用带有&
Reduce
,以便当同一行中的所有元素均为1时仅得到TRUE
获取sum
,并基于创建的“ 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.