Создание кадра данных из процесса сравнения - PullRequest
0 голосов
/ 14 февраля 2019

В качестве входного фрейма данных, имеющего такую ​​структуру данных:

dframe <- data.frame(id = c(1,2), col1 = c(4.2, 1.2), su = c(1.2,2.4))

Как можно сравнить число в каждой строке для двух столбцов и в соответствии с наибольшим получить новый столбец, который будет иметьcol имя наибольшего значения и второй столбец с этим значением?

dcom <- data.frame(id = c(1,2), col1 = c(4.2, 1.2), su = c(1.2,2.4), com = c("col1", "su"), com_num = c(4.2, 2.4))
dcom
  id col1  su  com com_num
1  1  4.2 1.2 col1     4.2
2  2  1.2 2.4   su     2.4

1 Ответ

0 голосов
/ 14 февраля 2019

Векторизованным решением может быть следующее.

com_num <- with(dframe, pmax(col1, su))
i <- which(dframe[-1] == com_num, arr.ind = TRUE)
dframe$com <- names(dframe[-1])[i[, 2]]
dframe$com_num <- com_num

dframe
#  id col1  su  com com_num
#1  1  4.2 1.2 col1     4.2
#2  2  1.2 2.4   su     2.4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...