这个问题在这里已经有了答案:
Using dplyr to gather dummy variables
(2 个回答)
Convert various dummy/logical variables into a single categorical variable/factor from their name in R
(3 个回答)
16 天前关闭。
嘿嘿,
我是 R 的初学者,遇到了一个到目前为止我找不到解决方案的问题。我想将虚拟变量转换回分类变量。
|dummy1| dummy2|dummy3|
|------| ------|------|
| 0 | 1 |0 |
| 1 | 0 |0 |
| 0 | 1 |0 |
| 0 | 0 |1 |
进入:
|dummy |
|------|
|dummy2|
|dummy1|
|dummy2|
|dummy3|
你知道如何在 R 中做到这一点吗?提前致谢。
最佳答案
你可以用 data.table 做到这一点
id_cols = c("x1", "x2")
data.table::melt.data.table(data = dt, id.vars = id_cols,
na.rm = TRUE,
measure = patterns("dummy"))
例子:
t = data.table(dummy_a = c(1, 0, 0), dummy_b = c(0, 1, 0), dummy_c = c(0, 0, 1), id = c(1, 2, 3))
data.table::melt.data.table(data = t,
id.vars = "id",
measure = patterns("dummy_"),
na.rm = T)[value == 1, .(id, variable)]
输出
id variable
1: 1 dummy_a
2: 2 dummy_b
3: 3 dummy_c
如果你用 NA 重新设置 0 会更容易,所以 na.rm = TRUE inmelt 会用 NA 丢弃每一行
关于从 R 中的虚拟对象重建分类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49130366/