2017-10-07 4 views
-1

J'ai une colonne de dataframe comme celui-ciappliquer contraint à caractère

> class(df$Released) 
[1] "Date" 

Lorsque j'utilise apply sur le vecteur, la valeur passée à FUN est sous la contrainte à caractère

> apply(df[1, ], 1, function(x) class(x['Released'])) 
      1 
"character" 

Que se passe-t-il?

+1

Vous lui dites d'appliquer à travers les lignes (étiqueté 1 dans le deuxième argument de apply) et en lui alimentant une seule ligne, également 1 [df [1,] et en lui demandant la classe de la colonne 'Released'. Donc, ceci s'applique seulement à la toute première instance de 'Released' en raison de la façon dont vous avez défini l'application et la fonction. exécutez 'str (sur df $ Released [1])' et voyez si cela correspond à la sortie de votre personnage .... – sconfluentus

+0

également d'intérêt https://stackoverflow.com/questions/18214431/r-apply-on-dataframe- how-to-avoid-implicit-character-conversion – user20650

+1

'df [1,]' est toujours une trame de données. 'apply' contraint son argument' X' à une matrice lorsqu'il s'agit d'une trame de données. Alors jetez un oeil à 'as.matrix (df [1,])' pour voir ce qui s'est passé. Vous pouvez également lire 'help (apply)'. –

Répondre

0

Essayez ceci:

sapply(df, class) 

La raison pour laquelle:

En utilisant apply() modifie la trame de données avec as.matrix() avant d'exécuter la classe de fonction(), et dans le processus, toutes les colonnes renverraient le caractère. En attendant, utiliser sapply() ne prend pas cette étape as.matrix() car il est conçu pour fonctionner avec des vecteurs, donc vos classes seront affichées avec précision.

+0

Pourriez-vous s'il vous plaît exposer sur votre réponse? – cosmosa

+0

@ cosmos1990 - Bien sûr, voir la modification ci-dessus. – www