Как установить подкадр данных в столбцах с датами - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть этот иллюстративный кадр данных:

df <- data.frame(Customer_Name = c("A", "B"), 
                 Country = c("X", "Y"), 
                 Transaction = c("01-01-2009", "01-31-2012"), 
                 Delivery = c("01-02-2009", "02-01-2012"), 
                 Return = c("01-27-2009", "03-22-2012"), 
                 Cost = c(1234, 5678))

Я бы хотел установить подмножество df в тех столбцах, которые содержат даты. У меня все хорошо с определением соответствующих столбцов с помощью grepl:

apply(df, 2, function(x) grepl("\\d{2}-\\d{2}-\\d{4}", x))
     Customer_Name Country Transaction Delivery Return  Cost
[1,]         FALSE   FALSE        TRUE     TRUE   TRUE FALSE
[2,]         FALSE   FALSE        TRUE     TRUE   TRUE FALSE

Но как только я пытаюсь установить подмножество df соответственно, я получаю ошибку:

df[, apply(df, 2, function(x) grepl("\\d{2}-\\d{2}-\\d{4}", x))]
Error in `[.data.frame`(df, , apply(df, 2, function(x) grepl("\\d{2}-\\d{2}-\\d{4}",  : 
  undefined columns selected

Как правильно установить подмножество df в столбцах даты?

1 Ответ

2 голосов
/ 24 апреля 2020
df[sapply(df, function(x) all(grepl("^\\d{2}-\\d{2}-\\d{4}$", x)))]
#   Transaction   Delivery     Return
# 1  01-01-2009 01-02-2009 01-27-2009
# 2  01-31-2012 02-01-2012 03-22-2012

или с dplyr

library(dplyr)

df %>% 
  select_if(~ all(grepl("^\\d{2}-\\d{2}-\\d{4}$", .)))
#   Transaction   Delivery     Return
# 1  01-01-2009 01-02-2009 01-27-2009
# 2  01-31-2012 02-01-2012 03-22-2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...