【发布时间】:2020-08-26 10:33:55
【问题描述】:
我有一个包含三个变量的数据集。每个变量可以取两个值“是”或“否”。所以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
【问题讨论】:
-
标签是否有重要顺序
-
如果可以是任意顺序,则
with(df1, as.integer(interaction(C1, C2, C3, lex.order = TRUE)))或library(dplyr);df1 %>% mutate(I = group_indices(., C1, C2, C3))或v1 <- do.call(paste, df1); match(v1, unique(v1)) -
您显然已经为每个组合分配了一个值,我认为您应该提供一个参考列表,您如何将每个组合映射到该值。如果您在映射方面很灵活,我可能会建议一个优雅的解决方案可能在于将您的 Yes / No 转换为 1 / 0,然后每列对于 C1 是 2^0,对于 C2 是 2^1,对于 C3 是 2^2,然后总结起来,一个简单的数学解决方案。
-
@Nadia,如果我将值转换为 1 和 0 并进行行求和,那么对于 X1=1、X2=0、X3=1,我将得到 2。 X1=1,X2=1,X3=0。这两个不一样。
-
@JosephWood 感谢有机会发帖,不幸的是,我实际上很忙,所以请继续,因为您已经制定了解决方案!
标签: r classification combinations