我有一个名为的数据框imp2
(大约 6,000 行),其中有 9 列标记'savres1'...'savres9'
。每列中的值为 1 或 0。对于每一行,只有其中 1 列的值为 1(其余均为 0)。
我想创建一个名为的新专栏'savres'
我将在其中放入一个 1 到 9 之间的值,该值与保存 1 值的列(在这组 9 列内)的索引相匹配。例如。如果'savres7'
是 1 并且这些列的其余部分是 0,那么savres
应等于 7。
我使用过几种变体which
, match
and %in%
找到值,但我没有得到我期望的输出。
下面是最近的试用函数和在数据框中创建的行示例集。
最近尝试的解决方案:
imp2 <- within(imp2, savres <- which(c(savres1, savres2, savres3, savres4, savres5, savres6, savres7, savres8, savres9) == 1) %% 9 + 1)
Results:
(注意,我没有包含所有列,但从这里的 4 列中,您可以看到该函数不起作用 -'savres'
第 4 行的值应为 3,第 1 行和第 2 行的值不应为 4 或 2)
sample <- head(imp2[c('savres1','savres2','savres3','savres4')],4)
savres | savres1 | savres2 | savres3 | savres4
4 | 0 | 0 | 0 | 0
2 | 0 | 0 | 0 | 0
1 | 1 | 0 | 0 | 0
1 | 0 | 0 | 1 | 0
有人可以推荐一个解决方案吗?
我认为这应该是一个相当简单的操作,但我对我尝试过的许多方法都感到沮丧。