Je dois diviser un grand fichier .csv, avec environ 9 colonnes et plus de 9 000 lignes, dans un fichier .txt distinct pour chaque ligne, et nommer chaque nouveau fichier par le nom dans sa première colonne.r - diviser un fichier CSV en plusieurs fichiers txt
par exemple. pour le fichier .csv:
01001_r1 32.4327 -86.6190 0.65 0.20 0.15 1.33 5.47 8
01001_r2 32.4327 -86.6190 0.65 0.20 0.15 1.33 5.46 8
01001_r3 32.4327 -86.6190 0.80 0.15 0.05 1.33 5.23 10
01003_r1 30.4887 -87.6918 0.65 0.20 0.15 1.33 5.23 9
01003_r2 30.4887 -87.6918 0.80 0.15 0.05 1.33 5.25 9
01003_r3 30.4887 -87.6918 0.65 0.20 0.15 1.33 4.96 8
je finirais avec 6 fichiers, avec une ligne chacun. Les colonnes du fichier de sortie doivent être séparées par des tabulations et le fichier ne doit pas contenir de noms de lignes ou de colonnes.
par exemple les fichiers de sortie devrait ressembler à ceci:
01001_r1 32.4327 -86.6190 0.65 0.20 0.15 1.33 5.47 8
C'est là où je suis arrivé jusqu'ici:
#set 'working directory'
setwd('C:/Users/Data/soils_data/sitesoil_in')
#identify data frame from .csv file
sd <- read.csv('site_soil.csv', sep="\t", header=F, fill=F)
lapply(1:nrow(sd), function(i) write.csv(sd[i,],
file = paste0(sd[i,1], ".txt"),
row.names = F, header = F,
quote = F))
Et voici ce que je reçois pour chaque fichier de sortie:
nom de fichier: 01001_r1
V1,V2,V3,V4,V5,V6,V7,V8,V9
01001_r1,32.4327,-86.619,0.65,0.2,0.15,1.33,5.47,8
Je ne peux pas l'obtenir pour éliminer les noms des colonnes ou pour séparer les colonnes avec des onglets. J'ai essayé avec header = F, ou col.names = F pour éliminer les en-têtes, et sep = "\ t" pour séparer les colonnes mais il ne reconnaît pas les commandes.
J'apprécierais toute aide. Merci, E.
Après toutes les suggestions, voici le code plus simple qui ferait l'affaire:
#set 'working directory'
setwd('C:/Users/Elena/Desktop/DayCent_muvp_MODEL/DayCent_SourceData/soils_data/sitesoil_in')
#identify data frame from .csv file
sd <- read.csv('site_soil.csv', sep="\t", header=F, fill=F)
lapply(1:nrow(sd),
function(i) write.table(sd[i,],
file = paste0(sd[i,1], ".txt",collapse = ""),
row.names = FALSE, col.names = FALSE,
sep = "\t"
))
Merci à tous pour votre aide. E.
check write.table - Votre approche l'enregistre de nouveau sous .csv ce qui n'est pas souhaitable dans votre cas. Pourriez-vous expliquer l'intention derrière cette division simplement utile en milliers de fichiers .txt jonchent votre disque? – Christian
Merci Christian, j'ai essayé, mais ça me donne une erreur si j'utilise write.table au lieu de write.csv ... Ce sont des fichiers d'entrée pour un autre code générant des fichiers pour une entrée de modèle. Le code postérieur nécessite que ces fichiers soient dans un format très spécifique pour reconnaître l'information. – EBB
Vous voudrez étudier l'erreur étant donné alors. 'write.csv' est un wrapper autour de' write.table', comme décrit par les docs ('? write.table'), et n'est pas conçu pour être aussi flexible. Dans mon expérience, il est presque toujours préférable d'utiliser 'write.table' et de spécifier manuellement les bons arguments nécessaires, plutôt que d'utiliser' write.csv' et j'espère que ses arguments sont ceux dont vous avez besoin. – user5359531