按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