r标签变量组合

问题描述 投票:0回答:1

我有一个包含三个变量的数据集。每个变量可以采用两个值“是”或“否”。因此2^3=8这三个变量的不同组合。

 C1   C2   C3
 Yes  No   No
 No   Yes  No
 No   Yes  No
 No   Yes  No
 Yes  Yes  Yes 
 No   No   Yes
 No   No   No
 Yes  Yes  No
 Yes  Yes  No
 No   Yes  Yes
 Yes  No   Yes
 Yes  No   Yes
 Yes  Yes  Yes

如何创建第四列来指示列C1,C2,C3的组合?预期的输出将是

 C1   C2   C3   I
 Yes  No   No   1
 No   Yes  No   2
 No   Yes  No   2
 No   Yes  No   2
 Yes  Yes  Yes  8
 No   No   Yes  3 
 No   No   No   4 
 Yes  Yes  No   5
 Yes  Yes  No   5
 No   Yes  Yes  6
 Yes  No   Yes  7 
 Yes  No   Yes  7
 Yes  Yes  Yes  8
r classification combinations
1个回答
1
投票

使用data.table的选项,其中DF是您的数据帧:

data.table::rleidv(DF)

data.table中的用法示例:

DT[, Idx := rleidv(.SD)]

输出:

     C1  C2  C3 Idx
 1: Yes  No  No   1
 2:  No Yes  No   2
 3:  No Yes  No   2
 4:  No Yes  No   2
 5: Yes Yes Yes   3
 6:  No  No Yes   4
 7:  No  No  No   5
 8: Yes Yes  No   6
 9: Yes Yes  No   6
10:  No Yes Yes   7
11: Yes  No Yes   8
12: Yes  No Yes   8
13: Yes Yes Yes   9

并且如果组合可能混杂在一起,则可以确保在创建索引之前先进行排序:

DT[order(C1, C2, C3), Idx := rleidv(.SD)]

如果我们可以四处移动行,则可以在创建索引之前按列排序。

数据:

library(data.table)
DT <- fread("C1   C2   C3
Yes  No   No
No   Yes  No
No   Yes  No
No   Yes  No
Yes  Yes  Yes 
No   No   Yes
No   No   No
Yes  Yes  No
Yes  Yes  No
No   Yes  Yes
Yes  No   Yes
Yes  No   Yes
Yes  Yes  Yes")
© www.soinside.com 2019 - 2024. All rights reserved.