在R中使用二进制表选择列

在R中使用二进制表选择列,r,R,我有一个数据帧x,顺序如下 date c1 c2 c3 c4 c5 c6 c7 c8 c9 Jan-08 12 23 12 11 10 1 49 34 23 Feb-08 14 33 11 11 20 11 29 44 23 等等 我有另一个二进制矩阵

我有一个数据帧x,顺序如下

             date       c1   c2   c3  c4    c5    c6   c7   c8   c9
             Jan-08     12   23   12  11    10    1    49   34   23    
             Feb-08     14   33   11  11    20    11   29   44   23    
等等

我有另一个二进制矩阵

                     1    3    6
              1      0    0    1
              2      0    0    0 
              3      0    1    0
              4      1    0    0
              5      0    1    0 
              6      1    0    0  
              7      0    0    0
              8      1    1    0
              9      0    1    1
我想看看我的二进制矩阵,并为二进制矩阵中的每一列创建一个新表,这样新表就只包含来自数据帧x的列,它们在二进制表中是1。 因此,我们将在这里创建3个数据帧,即data_frame_1、data_frame_3和data_frame_6,其中data_frame_1为格式

                     date    c4    c6     c8        
                     Jan-08  11    1      34 
                     Feb-08  11    11     44
数据帧3将被删除

                     date    c3    c5     c8   c9        
                     Jan-08  12    10     34   23 
                     Feb-08  11    20     44   23

使用
lappy
我们可以迭代二进制矩阵
mat
的列,并将二进制矩阵转换为逻辑向量,该逻辑向量用于对
x
数据帧中的列进行子集

lapply(1:ncol(mat), function(i) cbind(x[1], x[-1][as.logical(mat[, i])]))

#[[1]]
#    date c4 c6 c8
#1 Jan-08 11  1 34
#2 Feb-08 11 11 44

#[[2]]
#    date c3 c5 c8 c9
#1 Jan-08 12 10 34 23
#2 Feb-08 11 20 44 23

#[[3]]
#    date c1 c9
#1 Jan-08 12 23
#2 Feb-08 14 23

您可以使用
apply
迭代二进制矩阵的列,
bin
,子设置数据帧,
dat

#创建测试数据
种子(1)

dat显示的预期输出是否正确?应该是11、1和34。您能显示所有3个数据帧的输出吗?对不起,我之前搞错了。现在已经更正了可能我遗漏了什么,这两个表(数据集)之间的关系是什么?二进制矩阵的第二列中有4个1,但输出中只有3个值(这似乎又错了)。第2行应该是11、20和44?@NelsonGon二进制矩阵中的行对应于第一个表中的列。因此,我只需要选择二进制表中标记为1的列