Peut-être que je suis en train de le faire, mais je construis une fonction pour analyser la colonne de date automatiquement en fonction du nombre de colonnes entrées.Parse datetimes dans apply, retourne un nombre au lieu de Date
données:
CreatedDate LastModifiedDate
2015-11-20T19:46:11.000Z 2015-11-20T19:46:11.000Z
2015-11-21T02:54:54.000Z 2015-12-01T18:48:07.000Z
2015-11-21T14:36:32.000Z 2015-11-21T14:36:32.000Z
2015-11-21T16:03:41.000Z 2015-11-21T16:03:41.000Z
2015-11-21T17:31:43.000Z 2015-11-21T17:55:13.000Z
require(lubridate)
require(magrittr
parse_sf_hms <- function(subset) {
if(is.null(ncol(subset))){
subset %>% ymd_hms(tz="America/New_York",quiet=TRUE) %>% as.Date(format="%m/%d/%Y") -> x
return(x)
} else {
apply(subset, 2, function(x) x %>% ymd_hms(tz="America/New_York",quiet=TRUE) %>% as.Date(format="%m/%d/%Y"))
return(x)
}
}
Ainsi, le problème est que lorsque j'utilise une colonne (ex df[,1]
ou df[,c(CreatedDate)
].), La fonction retourne correctement:
[1] "2015-11-20" "2015-11-21" "2015-11-21" "2015-11-21"
[5] "2015-11-21"
Mais quand je l'utilise plus . une colonne (ex df[,c(1,2)]
ou df[,c('CreatedDate','LastModifiedDate')]
, au lieu que je reçois:
CreatedDate LastModifiedDate
[1,] 16759 16759
[2,] 16760 16770
[3,] 16760 16760
[4,] 16760 16760
[5,] 16760 16760
Pourquoi le vecteur unique renvoie-t-il correctement la valeur de date au format alors que l'application ne le fait pas? Est-ce qu'un lapply
, rbind
approcherait mieux ici? Juste essayer de comprendre les comportements.
Ne pas utiliser 'appliquer (sous-ensemble, 2, FUN)' comme il fait tout une matrice, qui contraint vos dates à un numérique. Essayez 'lapply (sous-ensemble, FUN)' à la place. – thelatemail
Merci @thelatemail - qui répond à la partie la plus importante de ma question sur le comportement. – gscott