R: Извлечь имя столбца для самых ранних и последних столбцов - PullRequest
0 голосов
/ 30 марта 2020

У меня есть набор данных с несколькими столбцами даты в R. Мне нужно извлечь имена столбцов самой ранней даты в каждой строке, как показано ниже:

Пример ввода данных Кадр данных

> df
Date1       Date2       Date3
2008-08-11  1995-02-25  2005-05-14
2010-06-18  2012-09-04  2003-01-16
2011-04-22  2006-11-05  1999-03-31

Строка: df$FirstDate <- apply(df[,c(1:3)], 1, min, na.rm = TRUE) дает мне самые ранние даты в каждой строке по желанию, но мне также нужно извлечь имя столбца (df$FirstColumn) в соответствии с желаемым выводом:

Желаемый результат

> df
Date1       Date2       Date3       FirstDate   FirstColumn
2008-08-11  1995-02-25  2005-05-14  1995-02-25  Date2
2010-06-18  2012-09-04  2003-01-16  2003-01-16  Date3
2011-04-22  2006-11-05  1999-03-31  1999-03-31  Date3

Есть ли прямой способ сделать это в R?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 30 марта 2020

Попробуйте:

ОБРАЗЦЫ ДАННЫХ :

df <- data.frame(
  Date1 = c(1989,  1995,  2005),
  Date2 = c(2010,  2012,  2003),
  Date3 = c(2011,  2006,  1999)
)

Минимумы:

df$Min <- apply(df[, 1:3], 1, min, na.rm = TRUE)

РЕШЕНИЕ :

Чтобы собрать имена столбцов, в которых расположены минимумы:

df$MinLocation <- apply(df[1:3], 1, function(x) names(x)[which.min(x)])

РЕЗУЛЬТАТ :

df
  Date1 Date2 Date3  Min MinLocation
1  1989  2010  2011 1989       Date1
2  1995  2012  2006 1995       Date1
3  2005  2003  1999 1999       Date3
2 голосов
/ 30 марта 2020
library(tidyverse)

df %>%
  mutate(
    FirstDate = pmin(Date1, Date2, Date3),
    FirstColumn = names(.)[max.col(as.matrix(.) == as.character(FirstDate))]
  )

В случае, если в ie указаны два или более столбца с самой ранней датой, аргумент ties.method max.col() определяет, какой столбец будет выбран. Смотри ?max.col. По умолчанию random.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...