Мой вопрос точно такой же, как следует

library(caret)
data(cars)
head(cars)
colnames(cars)

Ожидаемый ответ

cars$type <- names(cars[14:18])[max.col(cars[14:18])] 

Но использование имени столбцов, например, ниже, не работает. как с этим обойтись? Спасибо заранее.

cars$type <- cars[c("convertible", "coupe", "hatchback", "sedan", "wagon" )][apply(cars[c("convertible", "coupe", "hatchback", "sedan", "wagon" )], 1, match, x = 1)] 

Голова (автомобили)

1
Seyma Kalay 12 Июн 2021 в 17:52

2 ответа

Лучший ответ

Вы можете подгруппировать фрейм данных по имени аналогичным образом -

cols <- c("convertible", "coupe", "hatchback", "sedan", "wagon" )
cars$type <- cols[max.col(cars[cols])] 

Чтобы проверить вывод -

identical(cols[max.col(cars[cols])] , names(cars[14:18])[max.col(cars[14:18])])
#[1] TRUE
1
Ronak Shah 12 Июн 2021 в 14:54

Лучше указать ties.method, иначе он может выбрать "random" по умолчанию, и это может изменить результат в каждом прогоне, где есть несколько значений max в строке

cols <- c("convertible", "coupe", "hatchback", "sedan", "wagon" )
cars$type <- cols[max.col(cars[cols], "first")]
1
akrun 12 Июн 2021 в 20:47