Используя этот data.frame:IfElse: объединить 3 категории в одну
df <- read.table(text = c("
ID cat1 cat2 cat3
site1 High High High
site1 High High Medium
site1 High High Low
site1 High Medium High
site1 High Medium Medium
site1 High Medium Low
site1 High Low High
site1 High Low Medium
site1 High Low Low
site1 Medium High High
site1 Medium High Medium
site1 Medium High Low
site1 Medium Medium High
site1 Medium Medium Medium
site1 Medium Medium Low
site1 Medium Low High
site1 Medium Low Medium
site1 Medium Low Low
site1 Low High High
site1 Low High Medium
site1 Low High Low
site1 Low Medium High
site1 Low Medium Medium
site1 Low Medium Low
site1 Low Low High
site1 Low Low Medium
site1 Low Low Low
"), header =T)
Я хочу, чтобы создать новый столбец new_category
на основе cat1
, cat2
и cat3
.
Я хочу, чтобы каждый ряд в new_category
имел общий класс «или слово» в cat1
, cat2
и cat3
. Если все значения различны (Высокий, Средний и Низкий), new_category
возьмет самый высокий класс (High
в этом случае).
Например
Если
cat1 = High
,cat2 = High
,cat3= Medium
, тоnew_category = High
Если
cat1 = High
,cat2 = Medium
,cat3= Low
, тоnew_category = High
Если
cat1 = Medium
,cat2 = Medium
,cat3= Low
, тоnew_category = Medium
Я могу это сделать, используя ifelse
. Тем не менее, существует множество комбинаций cat1
и cat2
и cat3
.
Любое предложение для более быстрого или простого способа сделать это?
Perfect :-) Большое спасибо за ваше время и помощь. – aelwan
добро пожаловать. Я также узнал, что 'min' и' max' не могут применяться к обычным факторам, но могут применяться к упорядоченным факторам. :) – mt1022
Я добавляю его здесь, так как его точно такая же идея - разные функции. Чтобы избежать табуляции и 'which.max' по строке, альтернативой является табуляция спереди и использование' max.col'. И используйте 'ifelse', так как мы теперь работаем над длиной> 1 вектором. То есть 'tab = table (строка (df [-1]), as.matrix (df [-1])); ifelse (rowSums (tab! = 0) == 3, «High», colnames (tab) [max.col (вкладка, «first»)]) ' –