2010-11-20 11 views
0

J'ai cinq fichiers texte qui sont produits par un programme R, (chacun d'entre eux ayant un en-tête) qui doivent être combinés en un seul fichier. Je les ai combiné à l'aide rbind et mon problème est quand je les combine, la sortie résultante a en-tête attaché à la fin de chaque fichier par exemple, si les en-têtes sont censésCombiner les fichiers multiples avec un en-tête

Combine Resultant file 
A B C D 
1 3 5 7 ------------> Text file1 
6 9 0 3 
A B C D 
1 3 6 7 ------------> Text file 2 
5 7 8 3 
and so on.... 

au lieu de ce que je veux que le fichier de sortie d'avoir une seule tête à la ligne 1 de sorte que le fichier devrait ressembler à:

Combine Resultant file 
A B C D 
1 3 5 7 ------------> Text file1 
6 9 0 3 
1 3 6 7 ------------> Text file 2 
5 7 8 3 
and so on.... 

quelqu'un peut-il me dire comment faire? Le code que j'ai est:

S1 <- read.table("C:/Simulation_Results/sim_1_200.txt",sep=";",header= TRUE); 
S2 <- read.table("C:/Simulation_Results/sim_201_400.txt", sep=";",header= TRUE); 
S3 <- read.table("C:/Simulation_Results/sim_401_600_b.txt", sep=";",header= TRUE); 
S4 <- read.table("C:/Simulation_Results/sim_601_800.txt", sep=";",header= TRUE); 
S5 <- read.table("C:/Simulation_Results/sim_901_1000.txt",sep=";",header= TRUE); 
S6 <- read.table("C:/Simulation_Results/simulations_801_900.txt",sep=";",header= TRUE); 
options(max.print=28.5E6); 
S7 <- rbind(S1,S2,S3,S4,S5,S6) 
write.table(S7, file="C:/Simulation_Results/simulation_1_1000.txt", sep=";", 
      row.names=TRUE, col.names=FALSE, quote = FALSE); 

Merci!

+1

Cela me semble correct. Peut-être que l'erreur est dans les fichiers txt générés par votre autre programme. Pourrions-nous voir la tête (S1) et la queue (S1), s'il vous plaît? En outre, il est utile de formater le code dans votre question (mettez en surbrillance les sections de code et appuyez sur le bouton de code - celui avec 1010 dessus). –

+0

Peut-on voir voir la tête et la queue de S1? Est une partie du problème des virgules et des décimales? Comme Dwin l'a fait remarquer, votre code R qui écrit les fichiers txt est probablement erroné dans les en-têtes. –

+0

Avez-vous le code qui génère les fichiers? Si c'est le cas, je voudrais simplement sauvegarder les tables dans les variables individuelles x1 <- as.data.frame (table1) par exemple. Et puis rbind() –

Répondre

1

Cela ressemble à une importation incorrecte. Vous devriez fournir un exemple de données. Quoi qu'il en soit, au lieu d'utiliser read.table("some.file", header=TRUE, sep=";"), essayez read.csv2, car il a header=TRUE et sep=";" comme arguments par défaut.

Et à la place rbind, pourquoi n'utilisez-vous pas merge?

0

Oui; Il y a un problème avec vos données d'entrée ne correspondant pas à votre fonction de lecture et vous lisez dans les données avec le mauvais argument sep. Je pense que vous devez passer une ligne pour arriver au point où se trouvent les en-têtes. Essayez ceci:

S1 <- read.table("C:/Simulation_Results/sim_1_200.txt", header= TRUE, skip=1) 
S2 <- read.table("C:/Simulation_Results/sim_201_400.txt", skip=1, header= TRUE) 
S3 <- read.table("C:/Simulation_Results/sim_401_600_b.txt", skip=1 , header= TRUE) 
S4 <- read.table("C:/Simulation_Results/sim_601_800.txt", skip=1, header= TRUE) 
S5 <- read.table("C:/Simulation_Results/sim_901_1000.txt", skip=1 , header= TRUE) 
S6 <- read.table("C:/Simulation_Results/simulations_801_900.txt", skip=1, header= TRUE) 

Puis procéder comme avant. Le sep = ";" empêchait la séparation de l'espace blanc d'être reconnue et il y avait quelque chose dans la ligne de tête qui faisait que vos en-têtes n'étaient pas convertis en noms de colonnes.

0

suivi dwin: Que diriez-vous

startvals <- c(1,201,401,601,801,901) 
endvals <- c(startvals[-1]-1,1000) 
fns <- paste("C:/Simulation_Results/",startvals,"_",endvals,".txt",sep="") 
## I'm assuming for the moment that your S6 file is *not* named differently from the others 
S <- lapply(fns, read.csv2, skip=1) 
S_comb <- do.call(rbind,S) 

si vous aviez vos fichiers de simulation du nom d'une certaine manière pour que vous puissiez les identifier tous avec list.files (modèle = « [une expression régulière] ») alors vous pourriez commencer comme ça ...