我知道this solution,但是我很难将其应用于不仅是虚拟变量的数据。
要加载的一些示例代码,基本上来自一系列费用
df <- data.frame(Charge = c(12,4,6,10,5,9), Groceries = c(1,0,0,0,0,0),Utilities = c(0,1,0,0,0,0),Consumables = c(0,0,1,0,0,0), Transportation = c(0,0,0,1,0,0),Entertainment = c(0,0,0,0,1,0),Misc = c(0,0,0,0,0,1))
我想创建一个新的变量“ Category”,该变量采用当前编码为二进制的列名。我可以使用ifelse做到这一点,但我正在寻找更通用的解决方案,例如从重塑包装中取出。
当前,我只能使用以下方法解决此问题:
df$Category <- ifelse(df$Groceries==1, "Groceries",
ifelse(df$Utilities==1,"Utilities",
ifelse(df$Consumables==1,"Consumables",
ifelse(df$Transportation==1,"Transportation",
ifelse(df$Entertainment==1,"Entertainment","Misc")))))
非常感谢!
答案 0 :(得分:0)
如果始终为1,并且未在单行中重复,则使用max.col
返回该行中最大值的索引,并使用该索引将names
的子集数据集
df$Category <- names(df)[-1][max.col(df[-1])]
df$Category
#[1] "Groceries" "Utilities" "Consumables" "Transportation" "Entertainment" "Misc"