Выберите только столбцы Date и Numeri c - PullRequest
0 голосов
/ 28 мая 2020

Есть ли эффективный способ выбора столбцов Date и numeri c в R?

df <- data.frame(
    Date=c("10/11/2012","10/12/2012"),
    AE=c(1211,100),
    Percent=c(0.03,0.43),
    Name = c("A", "B")
)

Таким образом, я могу использовать функцию is.numeric, чтобы проверить, является ли столбец numeri c или нет а затем используйте один из нескольких способов подмножества, но есть ли функция для проверки того, является ли столбец датой и как использовать несколько условий для подмножества.

Я обнаружил, что в пакете lubridate есть функция is.Date но не вышло

#does not work
df <- df %>% 
    select_if(is.numeric|is.Date)

1 Ответ

2 голосов
/ 28 мая 2020

dplyr глаголы для выбора позволяют использовать различные методы предоставления условных операторов>

  • необработанных функций, как в is.numeric, которые будут вызываться с данными столбца (вектором) в качестве одного аргумент;
  • анонимные функции (стиль R), как в function(x) is.numeric(x) | inherits(x, "Date");
  • то, что называется «лямбда в стиле мурлыка» с использованием формул R (~), что кажется просто более компактная форма базового R anon-fun c, но есть некоторые отличия, а именно вы используете . или .x в качестве заполнителя для данных столбца, как в ответе ниже
df %>%
  select_if(~ is.numeric(.) | inherits(., "Date"))
#     AE Percent
# 1 1211    0.03
# 2  100    0.43

Поскольку ваш первый столбец на самом деле не является датой, давайте исправим это

# df$Date <- as.Date(df$Date, format="%m/%d/%Y")
df %>%
  mutate(Date = as.Date(Date, format="%m/%d/%Y")) %>%
  select_if(~ is.numeric(.x) | inherits(.x, "Date"))
#         Date   AE Percent
# 1 2012-10-11 1211    0.03
# 2 2012-10-12  100    0.43
...