Для набора столбцов я использую sh, чтобы определить, какой столбец имеет максимальное значение. Если значения между столбцами равны, я хотел бы использовать вес, чтобы решить, какой столбец выбрать. Я пробовал реализовать это с помощью case_when (), но это не работает. Я покажу эту проблему ниже на примере набора данных ...
Допустим, у меня есть набор данных, который включает эти три столбца (A, B, C), которые соответствуют количеству яблок, бананов или моркови. ребенок ест в день.
Для строки я хочу зарегистрировать наиболее потребляемую пищу (т. е. столбец с наибольшим значением). Если значение в любом столбце равно (например, 1 яблоко и 1 банан), тогда применяется следующий ранг. Apple> Banana> Carrot: если ребенок съест 1 яблоко и 1 банан, в журнале будет указано Apple.
Я пробовал реализовать это в R, используя пары операторов if_else с case_when (). Однако он не возвращает правильный результат. Например, последний ряд следует отнести к категории «яблоко», а не «морковь». Я не уверен, что делаю не так. Пожалуйста, предоставьте решение этой проблемы Tidyverse и, если возможно, объясните, почему мой подход не сработал.
library(tidyverse)
A <- c(1,1,3,3)
B <- c(2,3,1,1)
C <- c(1,1,1,2)
df <- data.frame(A,B,C)
top_food <- df %>%
mutate(highest = case_when(
C > B ~ "carrot", # if carrot > banana
C > A ~ "carrot", # if carrot > apple
B > A ~ "banana", # if banana > apple
B >= A ~ "banana", # if banana >= carrot
A >= B ~ "apple", # if apple >= banana
A >= C ~ "apple" # if apple >= carrot
))
> | A | B | C | HIGHEST | |
> | 1 | 2 | 1 | banana | |
> | 1 | 3 | 1 | banana | |
> | 3 | 1 | 1 | apple | |
> 3 | 1 | 2 | carrot | |
Примечания: - это пример набора данных. - Я открыт для решений с разными функциями, но, пожалуйста, предоставьте ответы Tidyverse, поскольку именно так я изучаю R. Если возможно, объясните, почему мой подход с использованием case_when () не сработал, чтобы я мог учиться. - Важно поддерживать форму / макет набора данных, чтобы его можно было использовать в программном обеспечении за пределами R, поэтому, пожалуйста, не конвертируйте в длинный формат.