добавление индекса столбца по дате в R - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть большая таблица с несколькими столбцами, которые я вырубил ниже.Таблица была введена через MicrosoftAccess, поэтому столбец «index» повсеместно, ни с чем конкретно не коррелируя.По сути, я хочу добавить в таблицу еще один столбец, который индексирует строки по дате - самые старые -> самые новые.Поэтому, независимо от каких-либо других критериев, я хочу, чтобы самая ранняя дата имела «1» и шла в хронологическом порядке 2,3,4,5 и т. Д. До последней даты.

  index- effort_ID- Tag ID- SUR- Date and Time
  350162 - 244 - 92 - 10916 - 2016-12-14 19:25:00
  77850 - 243 -77- 10913 -2016-12-14 19:28:10
  77858 - 243- 79 -10913 -2016-12-14 19:39:11

Ответы [ 4 ]

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

Также возможное решение без использования библиотек

 str<-c( "77858 - 243- 79 -10913 -2016-12-14 19:39:11",
         "350162 - 244 - 92 - 10916 - 2016-12-14 19:25:00",
         "77850 - 243 -77- 10913 -2016-12-14 19:28:10")

 customer<-c("lina","rita","mina")
 df <- data.frame(cust=customer,date=str)
 df

  cust                                            date
1 lina     77858 - 243- 79 -10913 -2016-12-14 19:39:11
2 rita 350162 - 244 - 92 - 10916 - 2016-12-14 19:25:00
3 mina     77850 - 243 -77- 10913 -2016-12-14 19:28:10

После

str<-as.character(substr(str,(nchar(str)+1)-19,nchar(str)))
str

"2016-12-14 19:39:11" "2016-12-14 19:25:00" "2016-12-14 19:28:10"

df$newDate=strptime(str, "%Y-%m-%d %H:%M:%S")
rownames(df) <- order(df$newDate)
df

  cust                                            date             newDate
2 lina     77858 - 243- 79 -10913 -2016-12-14 19:39:11 2016-12-14 19:39:11
3 rita 350162 - 244 - 92 - 10916 - 2016-12-14 19:25:00 2016-12-14 19:25:00
1 mina     77850 - 243 -77- 10913 -2016-12-14 19:28:10 2016-12-14 19:28:10

Наконец

df[order(as.numeric(rownames(df))),,drop=FALSE]
df
  cust                                            date             newDate
1 mina     77850 - 243 -77- 10913 -2016-12-14 19:28:10 2016-12-14 19:28:10
2 lina     77858 - 243- 79 -10913 -2016-12-14 19:39:11 2016-12-14 19:39:11
3 rita 350162 - 244 - 92 - 10916 - 2016-12-14 19:25:00 2016-12-14 19:25:00
0 голосов
/ 13 февраля 2019

сначала упорядочите ваш df с помощью пакета dplyr, затем добавьте столбец, используя mutate для индексации, это легко с оператором конвейера (%>%)

library(dplyr)

df %>% arrange(`Date and Time`) %>%
       mutate(new_index = 1:nrow(df))
0 голосов
/ 13 февраля 2019

A base R раствор

df <- df[order(df$`Date and Time`),]
df$date_index <- 1:nrow(df)
0 голосов
/ 13 февраля 2019

Вот ваши данные в лучшем формате:

df <- structure(list(index = c(350162, 77850, 77858), effort_ID = c(244, 
                                                                243, 243), `Tag ID` = c(92, 77, 79), SUR = c(10916, 10913, 10913
                                                                ), `Date and Time` = c("2016-12-14 19:25:00", "2016-12-14 19:28:10", 
                                                                                       "2016-12-14 19:39:11")), class = c("tbl_df", "tbl", "data.frame"
                                                                                       ), row.names = c(NA, -3L))

Затем используйте lubridate, чтобы перейти в формат даты и времени, arrange и установите индекс строки для столбца из tidyverse

library(lubridate)
library(tidyverse)

df2 <- df %>% 
  mutate(`Date and Time` = ymd_hms(`Date and Time`)) %>%
  arrange(`Date and Time`) %>% 
  rownames_to_column(var = "new_index")

Результат:

# A tibble: 3 x 6
  new_index  index effort_ID `Tag ID`   SUR `Date and Time`    
  <chr>      <dbl>     <dbl>    <dbl> <dbl> <dttm>             
1 1         350162       244       92 10916 2016-12-14 19:25:00
2 2          77850       243       77 10913 2016-12-14 19:28:10
3 3          77858       243       79 10913 2016-12-14 19:39:11
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...