我正在尝试合并汽车数据框(插入符号包)中的几个列.列"敞篷车,轿跑车,掀背车,轿车,旅行车"都有虚拟变量,我想创建一个名为type的列,其列名取决于车辆的类型.
library(caret)
data(cars)
head(cars)
colnames(cars)
Run Code Online (Sandbox Code Playgroud)
以下是汽车数据框的列名:
[1] "Price" "Mileage" "Cylinder" "Doors" "Cruise"
[6] "Sound" "Leather" "Buick" "Cadillac" "Chevy"
[11] "Pontiac" "Saab" "Saturn" "convertible" "coupe"
[16] "hatchback" "sedan" "wagon"
Run Code Online (Sandbox Code Playgroud)
如何将最后5个虚拟变量列合并/合并为1与相应的车辆类型?
任何见解或帮助将不胜感激!
矢量化解决方案max.col:
cars$type <- names(cars[14:18])[max.col(cars[14:18])]
Run Code Online (Sandbox Code Playgroud)
作为替代解决方案,您可以使用match:
cars$type <- names(cars[14:18])[apply(cars[14:18], 1, match, x = 1)]
Run Code Online (Sandbox Code Playgroud)
ind <- apply(cars[,14:18],1,function(x) which(as.logical(x)))
cars$type <- colnames(cars[,14:18])[ind]
head(cars)
Run Code Online (Sandbox Code Playgroud)