在R中使用二进制表选择列
我有一个数据帧x,顺序如下在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 等等 我有另一个二进制矩阵
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的列