我想请一位R专家写一个简洁的代码来从数据帧中对两个数据帧进行子集化。我的数据框df
如下所示:
mi chr bin A B C D sum QS
m004775 Ch01 1 FALSE TRUE FALSE FALSE 1 NA
m004776 Ch01 1 FALSE TRUE FALSE FALSE 1 NA
m027081 Ch01 4 FALSE TRUE FALSE TRUE 2 1
m027082 Ch01 4 FALSE TRUE FALSE FALSE 1 NA
m025498 Ch01 4 FALSE TRUE FALSE TRUE 2 1
m025500 Ch01 6 FALSE TRUE TRUE TRUE 3 1
m027084 Ch01 6 FALSE FALSE TRUE TRUE 2 NA
m027088 Ch01 6 FALSE TRUE TRUE TRUE 3 2
m004820 Ch01 6 TRUE FALSE FALSE FALSE 1 NA
m004827 Ch01 7 FALSE TRUE FALSE FALSE 1 NA
m004828 Ch01 7 FALSE TRUE FALSE FALSE 1 1
m004830 Ch01 7 FALSE FALSE TRUE TRUE 2 NA
m004859 Ch01 7 TRUE TRUE FALSE FALSE 2 NA
m025511 Ch01 9 TRUE TRUE FALSE FALSE 2 1
m004946 Ch01 9 TRUE TRUE FALSE FALSE 2 NA
m004947 Ch01 9 FALSE TRUE FALSE FALSE 1 NA
m027141 Ch01 9 TRUE FALSE TRUE TRUE 3 1
m027156 Ch01 9 TRUE TRUE TRUE FALSE 3 NA
m027163 Ch01 9 TRUE FALSE FALSE FALSE 1 NA
m027165 Ch01 9 TRUE TRUE TRUE FALSE 3 2
m027200 Ch01 10 TRUE TRUE TRUE FALSE 3 NA
m005105 Ch01 10 TRUE TRUE TRUE TRUE 4 1
预期的子集数据框df1
mi chr bin A B C D sum QS
m027081 Ch01 4 FALSE TRUE FALSE TRUE 2 1
m025500 Ch01 6 FALSE TRUE TRUE TRUE 3 1
m004828 Ch01 7 FALSE TRUE FALSE FALSE 1 1
m027141 Ch01 9 TRUE FALSE TRUE TRUE 3 1
m027165 Ch01 9 TRUE TRUE TRUE FALSE 3 2
m005105 Ch01 10 TRUE TRUE TRUE TRUE 4 1
预期的子集数据框df2
mi chr bin A B C D sum QS
m004775 Ch01 1 FALSE TRUE FALSE FALSE 1 NA
m004820 Ch01 6 TRUE FALSE FALSE FALSE 1 NA
m004830 Ch01 7 FALSE FALSE TRUE TRUE 2 NA
m004859 Ch01 7 TRUE TRUE FALSE FALSE 2 NA
子集的行必须符合以下规则:
对于每个组的每个bin(列bin
:level 1, 2, 3, …,20
)(列chr1
:levels ch01, ch02, …,ch20
):
A
,B
,C
或D
具有TRUE
值,请选择尽可能少的行{{}列TRUE
,A
,B
和C
中的{1}} {列中的D
值的数量为列{{1} }); TRUE
中的值是数字(值:sum
,QS
或1
,则选择的优先顺序为:2
> 3
> 1
);所选行转到2
; 3
中的值为df1
,则遵循与规则1相同的规则,所选行将转到QS
,如果bin已选择行对于相应的列NA
,df2
,A
或B
,C
中没有对此广告单元的选择。我手动完成了这个选择。首先,按列D
对数据框进行排序,以分隔数字和df2
,然后按QS
,NA
,chr
(递减顺序)对数字块进行排序, bin
(递增顺序),然后为每个bin选择最顶层的一个。如果选中sum
中QS
的行,则会完成这些分页,如果选择了4
,sum
或3
的行,我需要查找其他可以选择同一个bin中的行。然后移至2
块以执行类似的选择,但是如果相同列中的行包含相应列1
,NA
,A
或B
{在数字块中选择了{1}}值,C
块中没有选择。
使用大数据帧太复杂和耗时。如果有人可以帮助我使用R代码,那将节省我很多时间。谢谢你的帮助。