我有一个数据框,其中包含 R 中的 30 列,其中包含二进制数据。每行恰好包含一个 1。换句话说,二进制值是互斥的。对于所有 30 列,同一行中没有两列可以包含 1。这是我的意思的一个例子。
1 0 0
0 1 0
0 0 1
1 0 0
0 0 1
现在显然,将这些信息分布在三十列上的计算成本非常高。我想要做的是将所有这 30 列合并到包含 30 个不同因子变量的一列中。例如,新列每行包含 2 个,其中第二列有 1 个,每行包含 3 个,第三列有 1 个,等等。重要的是要保留原始顺序,并且位置在运行时不会困惑作为其他列的索引。所以上面的 3 列将变成这样:
1
2
3
1
3
如何在 R 中实现这一目标?
非常感谢
最佳答案
我们可以使用max.col
来查找数据集第一个值的索引
max.col(df1)
#[1] 1 2 3 1 3
或者使用pmax
do.call(pmax, col(df1)*df1)
#[1] 1 2 3 1 3
数据
df1 <- structure(list(v1 = c(1L, 0L, 0L, 1L, 0L), v2 = c(0L, 1L, 0L,
0L, 0L), v3 = c(0L, 0L, 1L, 0L, 1L)), .Names = c("v1", "v2",
"v3"), class = "data.frame", row.names = c(NA, -5L))
关于r - 将R中的多个二进制列合并为一列并保留位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43206649/