2012-02-03 6 views
2

Suite à un question I wrote a few days ago, j'ai finalement trouvé comment copier dans le presse-papiers pour coller dans d'autres applications (lire: Excel). Toutefois, lorsque vous utilisez la fonction pour copier et coller, les en-têtes de colonne variables ne s'alignent pas correctement lors du collage.Les colonnes R - pipe ("pbcopy") ne sont pas alignées

données (provenant d'un exemple de données transitant je me trouvais regardant):

data <- read.csv("http://datasets.flowingdata.com/post-data.txt") 

Fonction copie:

write.table(file = pipe("pbcopy"), data, sep = "\t") 

Une fois chargé dans, les données se présente comme suit:

id views comments    category 
1 5019 148896  28 Artistic Visualization 
2 1416 81374  26   Visualization 
3 1416 81374  26    Featured 
4 3485 80819  37    Featured 
5 3485 80819  37    Mapping 
6 3485 80819  37   Data Sources 

Il existe un numéro de ligne sans nom de variable de colonne (1, 2, 3, 4, ...)

En utilisant la fonction read.table(pipe("pbpaste")), il se rechargera dans R bien.

Cependant, quand je le coller dans Excel, ou TextEdit, le nom de colonne pour la seconde variable sera dans la première tranche de nom de colonne variable comme ceci:

id views comments category  
1 5019 148896  28   Artistic Visualization 
2 1416 81374  26   Visualization 
3 1416 81374  26   Featured 
4 3485 80819  37   Featured 
5 3485 80819  37   Mapping 
6 3485 80819  37   Data Sources 

qui sort de la colonne de fuite sans nom de colonne.

Existe-t-il un moyen de garantir que les données copiées dans clipboard sont correctement alignées et étiquetées?

Répondre

4

Les numéros de ligne n'ont pas de nom de colonne dans un R data.frame. Ils n'étaient pas dans l'ensemble de données d'origine, mais ils sont mis dans la sortie dans le presse-papiers, sauf si vous le supprimez. La valeur par défaut de cette option est TRUE mais vous pouvez la remplacer. Si vous voulez une telle colonne en tant que colonne nommée, vous devez le faire. Essayez ceci lors de l'envoi à Excel.

df$rownums <- rownames(df) 
edf <- df[ c(length(df), 1:(length(df)-1))] # to get the rownums/rownames first 
write.table(file = pipe("pbcopy"), edf, row.names=FALSE, sep = "\t") 
+0

« row.names = FALSE' fourni exactement ce que je cherchais. Merci. – mikebmassey

1

Vous pouvez juste vouloir ajouter l'argument col.names=NA à votre appel à write.table(). Cela a pour effet d'ajouter une chaîne de caractères vide (un nom de colonne vide) à la ligne d'en-tête de la première colonne.

write.table(file = pipe("pbcopy"), data, sep = "\t", col.names=NA) 

Pour voir la différence, comparer ces deux appels de fonction:

write.table(data[1:2,], sep="\t") 
# "id" "views" "comments"  "category" 
# "1"  5019 148896 28  "Artistic Visualization" 
# "2"  1416 81374 26  "Visualization" 

write.table(data[1:2,], sep="\t", col.names=NA) 
# ""  "id" "views" "comments"  "category" 
# "1"  5019 148896 28  "Artistic Visualization" 
# "2"  1416 81374 26  "Visualization" 
Questions connexes