2017-08-08 1 views
0

Je suis nouveau à la programmation avec R.Créer une boucle for pour lire les données importantes en morceaux et créer de nouvelles colonnes

Je suis en train d'écrire une boucle dans laquelle se lit Mandrin de données séparément (comme la taille des données est de 20 Go avec 300 millions de lignes) et exécute un code pour créer des colonnes pour les dates et écrire chaque morceau comme un fichier csv dans chaque dossier. Ce qui suit est un procès qui a été suggéré par un autre membre. Cela fonctionne bien mais le seul problème est que je ne suis pas capable d'écrire chaque morceau dans la même boucle une fois qu'il effectue le processus.

index = 0 
nrows = length(count.fields("RM.csv", sep = ",")) 
df = vector('list',ceiling(nrows/2)) 
col_names = colnames(read.csv('RM.csv', nrow=1, header = T)) 
end_found=FALSE 

while(!end_found) 
{ 
    begin = 1000*index 
    end = min(nrows,begin+1000) 
    print(paste0("Reading rows ", begin+1 ," to ", end)) 
    df[[index+1]] = fread('RM.csv',skip = begin, nrows =end-begin, 
         col.names = col_names) 
    index = index+1 
    if(end==nrows) end_found=TRUE 
    df = do.call(as.data.frame,df) 
    write.csv(df,file = paste0('test1',index,'.csv')) 
} 

données:

RM.csv: 
     Date 
    1 7/30/2017 19:16 
    2 7/30/2017 19:05 
    3 7/30/2017 19:03 
    4 7/30/2017 19:37 
    5 7/30/2017 18:36 
    6 7/30/2017 20:08 
    7 7/30/2017 19:00 
    8 7/30/2017 19:21 
    9 7/30/2017 17:01 

désiré Rendement:

Date Month Year 
1 7/30/2017 19:16 Jul-17 2017 
2 7/30/2017 19:05 Jul-17 2017 
3 7/30/2017 19:03 Jul-17 2017 
4 7/30/2017 19:37 Jul-17 2017 
5 7/30/2017 18:36 Jul-17 2017 
6 7/30/2017 20:08 Jul-17 2017 
7 7/30/2017 19:00 Jul-17 2017 
8 7/30/2017 19:21 Jul-17 2017 
9 7/30/2017 17:01 Jul-17 2017 
+0

Pouvez-vous décrire la sortie attendue? C'est un peu difficile à visualiser sans savoir à quoi ressemble le 'RM.csv'. En outre, c'est une mauvaise idée de faire une boucle et de lire un gros fichier d'entrée à plusieurs reprises. –

+0

Savez-vous que vous pouvez ajouter des données aux fichiers. Lisez la page d'aide de 'write.table'. –

+0

@Adam Quek J'ai mis à jour ma question. Donc disons que j'extrais un morceau de 9 lignes avec Date en utilisant cette boucle que deux autres colonnes telles que Mois et Année à créer pour ce même morceau et il devrait écrire un fichier csv dans le même répertoire. Plus tard, en utilisant un script batch ou MySQL, je vais ajouter ces fichiers. – user3301082

Répondre

0

Voici un exemple de casser iris ensemble de données en 15 data.frame, chacune avec au 10 rangées. J'espère que cela pourrait vous aider avec ce que vous essayez de faire avec votre ensemble de données.

seq.int <- seq(0, nrow(iris), 10) 
seq.gp <- cut(1:nrow(iris), breaks=seq.int, include.lowest=TRUE) 

iris_list <- split(iris, seq.gp) 

Vous pouvez ensuite manipuler chaque data.frame au sein de la liste à l'aide de la liste des boucles de l'environnement ou lapply. Après quoi, chaque data.frame peut être écrit en tant que csv séparé comme suit:

names(iris_list) <- paste0("test1_", sprintf("%02d", 1:length(iris_list))) 
lapply(names(iris_list), function(x) write.csv(iris_list[[x]], paste0(x, ".csv")))