2010-09-02 6 views
1

Je prends un échantillon aléatoire de données (a) que j'ai. Le qualificateur a [, 1] doit être exporté dans Excel. Cependant, j'ai des problèmes.échantillon aléatoire à partir de données et sortie dans Excel

str(a) 

'data.frame': 2299 obs. of 5 variables: 
$ A   : Factor w/ 2284 levels "01012223427",..: 1339 78 779 1590 1687 64 1034 633 1321 109 


a[sample(a[,1],300),]->q 

Ceci résulte en 300 échantillons aléatoires, mais plusieurs d'entre eux sont NA. Des idées?

q[,1]->r 

str(r) 
Factor w/ 2284 levels "01012223427",..: 85 1162 1886 549 1996 789 185 321 632 2273 

Je dois obtenir le vecteur r dans le format 01012223427 dans Excel, mais faire write.csv(r,"r.csv") résultats dans un fichier avec concactenated 1, « 01012223427 » etc dans toutes les cellules de la colonne. J'ai essayé write.csv(as.numeric(r),"r.csv") à aucune aide avec les facteurs eux-mêmes en cours de production. Comment puis-je faire ceci?

--edit

write.csv2 (r, "300.csv", row.names = F) a résolu mes problèmes, mais je suis encore incertain en ce qui concerne la raison pour laquelle l'AN sont introduits ...

// M

Répondre

5

pour convertir un facteur de nombres en numérique, vous devez d'abord changer de caractère, sinon vous obtenez les numéros internes du facteur, plutôt que les étiquettes de niveau:

as.numeric(as.character(r)) 

NA sont éventuellement introduits en raison de caractères non numériques dans les niveaux de facteur.

+0

Cela a aidé ... Appréciez-le. // M – Misha

1

Je vérifierais aussi pourquoi vous avez un facteur là en premier lieu. Il me semble que vous l'avez lu à partir d'un fichier texte, et qu'il y a soit des espaces quelque part, soit du texte (un espace, un point, un onglet, les lettres NA, ...) qui fait voir à R colonne comme un caractère, et de le transformer en un facteur lors de l'utilisation de read.csv ou les goûts.

Si vous l'avez trouvé, vous savez également pourquoi vous obtenez le NA, et vous pouvez le corriger avant d'enregistrer la donnée dans un fichier texte. Vérifiez l'option stringsAsFactors = F dans read.table() et read.csv() (ou alternativement, as.is = T dans read.csv).

À côté de cela, le morceau de code:

a[sample(a[,1],300),]->q 

ne fait pas ce que vous pensez que je suppose. J'utilise les indices lui-même, quelque chose dans la ligne de:

a[sample.int(dim(a)[1],300),] -> q 

Si devient numérique, votre code ci-dessus ne fonctionnera plus. Il prendra les valeurs de a [, 1], dont l'une est 01012223427. Donc, vous obtiendrez une erreur, car il n'y a pas de ligne avec ce numéro d'index. De même, lorsque vous transférez un [, 1] comme caractère, le code que vous utilisez va se casser.

Questions connexes