2017-06-30 3 views
0

J'ai récemment pris connaissance de l'opérateur de tuyauterie%>% et j'essaie de l'incorporer dans certains des projets sur lesquels j'ai travaillé. Je reçois une erreur quand j'essaie d'utiliser as.Date dans le tube.R Erreur lors de l'utilisation de as.Date dans un%>%

Exemple

numbers <- c(1, 2, 3, 4, 5) 
dates <- c("4/13/2017", "2/20/2017", "3/5/2017", "4/14/2017", "10/22/2017") 
df <- data.frame(numbers, dates) 
    numbers  dates 
1  1 4/13/2017 
2  2 2/20/2017 
3  3 3/5/2017 
4  4 4/14/2017 
5  5 10/22/2017 

Normalement ce que j'utilise est:

df$dates <- as.Date(df$dates, "%m/%d/%Y") 

Lorsque vous essayez de l'utiliser dans un tuyau, j'ai essayé:

df %>% 
    as.Date(dates, "%m/%d/%Y") 

Mais reçois une erreur message:

Error in as.Date.default(., dates, "%m/%d/%Y") : 
    do not know how to convert '.' to class “Date” 

Je ne suis toujours pas très familier avec les opérateurs de tuyauterie, il est donc très probable que cette commande ne soit pas une commande que vous utiliseriez dans un tuyau.

Merci d'avance pour toute idée ou suggestion!

Répondre

5

Je pense que vous devez ajouter des mutations à l'opérateur de tuyauterie. Cependant, je ne sais pas si cet opérateur cas de tuyauterie est mieux que tout simple df$dates <- as.Date(df$dates, "%m/%d/%Y")

library(dplyr) 

numbers <- c(1, 2, 3, 4, 5) 
dates <- c("4/13/2017", "2/20/2017", "3/5/2017", "4/14/2017", "10/22/2017") 
df <- data.frame(numbers, dates) 

df %>% 
    mutate(dates=as.Date(dates, "%m/%d/%Y")) 
+0

Cela a fonctionné, merci! Vous avez raison de dire que l'opérateur de tuyauterie n'est pas meilleur pour cet exemple. Le projet sur lequel je travaille cependant, j'utilise plus que juste l'as.Date dans le tuyau. – Joe

0

Dans ce cas, vous souhaitez utiliser l'opérateur %$% qui vous donne accès aux colonnes directement:

df %$% as.Date(dates, "%m/%d/%Y") 
# [1] "2017-04-13" "2017-02-20" "2017-03-05" "2017-04-14" "2017-10-22" 

Il est similaire à la syntaxe suivante à l'aide with:

with(df,as.Date(dates, "%m/%d/%Y"))