Ajouter du texte à un dataframe avant de l'exporter

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Arnaud de Coninck
Messages : 24
Enregistré le : 17 Fév 2015, 13:31
Contact :

Ajouter du texte à un dataframe avant de l'exporter

Messagepar Arnaud de Coninck » 08 Sep 2021, 21:25

Bonjour,

J'aimerais savoir s'il est possible d'ajouter des lignes de texte dans dataframe une fois qu'il est formaté et prêt à être exporté en format .txt.
En gros, j'ai data frame de 1024 lignes de données qui est le résultat de la somme de plusieurs autres dataframe. il est structuré ainsi:

spe1
channel content
1 0
2 0
3 0
....
1022 165
1023 172
1024 157

Code : Tout sélectionner

df <- structure(list(channel = 1:1024, content = c(0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 0, 1, 0, 2, 1, 3, 6, 12, 14, 24, 36, 47, 66,
82, 87, 89, 95, 107, 110, 108, 110, 96, 111, 107, 101, 95, 96,
106, 104, 90, 99, 91, 95, 91, 95, 106, 101, 124, 98, 109, 114,
106, 96, 83, 68, 68, 71, 78, 85, 83, 86, 84, 92, 108, 128, 139,
178, 335, 551, 848, 1319, 1621, 1751, 1600, 1105, 732, 423, 251,
146, 126, 114, 119, 130, 138, 175, 226, 283, 347, 310, 257, 271,
191, 111, 134, 87, 80, 88, 80, 81, 96, 93, 86, 98, 113, 131,
149, 111, 117, 98, 89, 73, 102, 98, 104, 107, 118, 106, 146,
185, 235, 261, 269, 309, 250, 197, 192, 180, 151, 158, 181, 187,
218, 250, 263, 312, 370, 413, 458, 493, 559, 506, 447, 452, 451,
441, 481, 563, 745, 1092, 2265, 4899, 10742, 23030, 45114, 76687,
112239, 144010, 157592, 149263, 120747, 85283, 52187, 27894,
13399, 6285, 3272, 2556, 3336, 5471, 9036, 13742, 18493, 22550,
23194, 21161, 16784, 11690, 7000, 3807, 1832, 801, 356, 154,
72, 46, 48, 38, 27, 29, 21, 27, 27, 37, 28, 38, 36, 52, 62, 36,
34, 22, 39, 38, 31, 27, 31, 37, 27, 28, 17, 25, 33, 32, 20, 30,
30, 31, 30, 43, 35, 34, 31, 35, 28, 31, 33, 22, 34, 33, 43, 31,
33, 35, 36, 52, 51, 49, 46, 66, 59, 84, 77, 80, 77, 80, 72, 65,
49, 58, 60, 52, 65, 69, 62, 75, 62, 94, 91, 85, 87, 122, 124,
138, 137, 155, 145, 137, 117, 121, 103, 91, 101, 76, 77, 65,
80, 63, 70, 64, 62, 71, 119, 140, 173, 267, 402, 537, 701, 821,
939, 929, 857, 691, 551, 419, 323, 254, 201, 184, 186, 149, 153,
155, 169, 169, 193, 170, 182, 170, 195, 176, 191, 255, 219, 250,
273, 322, 317, 354, 400, 376, 431, 360, 425, 399, 322, 353, 298,
325, 383, 394, 398, 471, 583, 671, 718, 852, 879, 827, 830, 773,
698, 607, 547, 477, 417, 376, 375, 421, 381, 409, 449, 455, 495,
442, 390, 390, 376, 319, 327, 311, 276, 328, 300, 333, 360, 379,
399, 428, 418, 385, 414, 402, 391, 421, 420, 433, 405, 452, 458,
507, 602, 589, 679, 751, 768, 749, 833, 790, 729, 684, 695, 638,
513, 553, 555, 605, 592, 624, 549, 586, 561, 545, 584, 559, 490,
537, 553, 600, 556, 578, 582, 541, 554, 575, 514, 549, 566, 494,
507, 536, 542, 534, 565, 552, 576, 592, 601, 601, 601, 642, 600,
652, 670, 680, 707, 706, 735, 713, 769, 825, 835, 891, 928, 974,
975, 1002, 1119, 1097, 1086, 1041, 1087, 991, 1016, 924, 820,
856, 877, 890, 866, 884, 841, 862, 847, 832, 860, 922, 870, 810,
893, 782, 781, 804, 815, 773, 801, 807, 770, 774, 838, 781, 822,
802, 761, 776, 819, 807, 810, 802, 889, 909, 838, 864, 893, 865,
897, 907, 901, 901, 914, 918, 964, 956, 951, 1011, 950, 949,
986, 1028, 1018, 1022, 971, 947, 1020, 1058, 1040, 1046, 1039,
1072, 1041, 1043, 1016, 1173, 1048, 1101, 1040, 1029, 1151, 1109,
1155, 1107, 1139, 1064, 1169, 1081, 1153, 1129, 1072, 1026, 1116,
1152, 1072, 1080, 1144, 1157, 1173, 1158, 1246, 1124, 1112, 1192,
1161, 1144, 1231, 1111, 1158, 1152, 1151, 1223, 1168, 1183, 1116,
1214, 1186, 1197, 1205, 1161, 1195, 1164, 1169, 1134, 1107, 1155,
1145, 1194, 1165, 1212, 1200, 1233, 1145, 1192, 1242, 1181, 1249,
1216, 1189, 1237, 1214, 1246, 1223, 1185, 1255, 1238, 1202, 1327,
1267, 1296, 1217, 1217, 1248, 1260, 1266, 1269, 1276, 1275, 1237,
1238, 1176, 1221, 1250, 1152, 1235, 1201, 1186, 1218, 1161, 1177,
1227, 1158, 1183, 1114, 1120, 1182, 1136, 1214, 1156, 1171, 1087,
1212, 1167, 1218, 1132, 1167, 1176, 1139, 1186, 1197, 1148, 1113,
1152, 1149, 1181, 1200, 1181, 1191, 1172, 1134, 1083, 1152, 1198,
1168, 1191, 1228, 1152, 1218, 1202, 1232, 1198, 1257, 1254, 1294,
1374, 1424, 1419, 1566, 1602, 1569, 1586, 1513, 1512, 1458, 1367,
1319, 1237, 1255, 1241, 1256, 1200, 1120, 1207, 1136, 1155, 1085,
1101, 1189, 1096, 1097, 1125, 1133, 1143, 1151, 1157, 1080, 1089,
1151, 1132, 1104, 1135, 1144, 1206, 1130, 1130, 1199, 1148, 1142,
1135, 1106, 1189, 1123, 1175, 1092, 1150, 1152, 1180, 1157, 1094,
1173, 1110, 1118, 1130, 1130, 1107, 1158, 1044, 1096, 1093, 1095,
1078, 1118, 1091, 1074, 1128, 1109, 1046, 1114, 981, 1070, 1026,
1006, 1066, 1104, 1036, 1042, 1052, 1105, 1104, 1081, 1112, 1132,
1076, 1093, 1066, 1038, 1075, 1053, 980, 1011, 1043, 1047, 1043,
1066, 971, 960, 943, 962, 990, 991, 994, 994, 988, 981, 958,
956, 934, 958, 993, 949, 1006, 1014, 979, 949, 991, 952, 929,
941, 972, 965, 1031, 937, 924, 923, 952, 897, 914, 956, 903,
922, 908, 915, 928, 928, 903, 920, 970, 914, 913, 873, 885, 837,
863, 918, 879, 903, 829, 909, 866, 844, 902, 868, 823, 878, 908,
835, 862, 885, 876, 821, 849, 833, 864, 861, 893, 881, 853, 855,
914, 917, 830, 795, 851, 833, 810, 842, 905, 796, 802, 876, 855,
826, 807, 838, 830, 804, 859, 851, 875, 839, 890, 821, 805, 833,
873, 876, 864, 831, 902, 846, 932, 899, 892, 897, 847, 858, 929,
957, 1016, 952, 990, 1072, 932, 1056, 1079, 1150, 1117, 1168,
1225, 1223, 1301, 1336, 1332, 1428, 1488, 1502, 1471, 1521, 1556,
1600, 1635, 1586, 1607, 1597, 1578, 1520, 1547, 1531, 1469, 1462,
1380, 1380, 1417, 1325, 1225, 1196, 1159, 1175, 1126, 1114, 1052,
1012, 906, 969, 907, 851, 881, 856, 835, 765, 814, 756, 722,
773, 718, 704, 685, 668, 722, 686, 677, 612, 640, 654, 639, 600,
613, 573, 635, 624, 652, 684, 739, 801, 845, 931, 967, 1014,
1169, 1155, 1195, 1298, 1307, 1271, 1275, 1328, 1200, 1168, 1160,
1026, 960, 826, 767, 676, 623, 585, 544, 562, 491, 501, 507,
490, 484, 499, 544, 487, 446, 472, 475, 460, 515, 520, 515, 544,
514, 486, 496, 520, 546, 489, 528, 524, 522, 494)), class = "data.frame", row.names = c(NA,
-1024L))



J'exporte le tout en format texte, mais pour que je puisse l'utiliser ensuite avec un logiciel de traitement de données, il doit y avoir en entête les mêmes paramètres que dans le fichier d'origine, sinon le logiciel ne va pas le reconnaitre. Ce sont les paramètres d'analyse suivant qui devraient se trouver en tête de fichier avant les deux colonnes "channel et content" :

    Date: 10/23/2019
    Time: 13:21
    Version no: 0.00
    Project name: 55
    Sample name: 222
    Section name: section
    Position 496.000000 mm
    E0 0.000000 keV
    E1 1.000000 keV/channel
    sample surface 7.174236 cm
    Tube anode: Rh
    Tube voltage: 30 kV
    Tube current: 50 mA
    gain 15
    std. database
    resultfile result
    matrix element 11
    sample thickness 1.000000
    air passage 0.560000 cm
    comments in position
    peaking_time 2.000000 m-sec
    trigger_threshold 897.216797 V
    mca_bin_width 20.500000 no:
    number_mca_channels 1024.000000 no:
    gap_time 0.200000 m-sec
    trigger_peaking_time 0.520000 m-sec
    livetime 16.621679 seconds
    runtime 20.007089 seconds
    input_count_rate 30760.328138 cps
    output_count_rate 25555.342369 cps

Est-ce qu'il y a une fonction qui permet de coller ces lignes?
Merci d'avance
Arnaud

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Ajouter du texte à un dataframe avant de l'exporter

Messagepar Logez Maxime » 09 Sep 2021, 07:18

Bonjour,

Tu peux écrire les lignes d'en tête dans un fichier txt et par la suite écrire ton data.frame dans ce même fichier à la suite, en spécifiant append = TRUE dans la fonction read.table par exemple.

Code : Tout sélectionner

entete <- c("Date: 10/23/2019", "Time: 13:21", "Version no: 0.00", "Project name: 55",
"Sample name: 222", "Section name: section", "Position 496.000000 mm",
"E0 0.000000 keV", "E1 1.000000 keV/channel", "sample surface 7.174236 cm",
"Tube anode: Rh", "Tube voltage: 30 kV", "Tube current: 50 mA",
"gain 15", "std. database", "resultfile result", "matrix element 11",
"sample thickness 1.000000", "air passage 0.560000 cm", "comments in position",
"peaking_time 2.000000 m-sec", "trigger_threshold 897.216797 V",
"mca_bin_width 20.500000 no:", "number_mca_channels 1024.000000 no:",
"gap_time 0.200000 m-sec", "trigger_peaking_time 0.520000 m-sec",
"livetime 16.621679 seconds", "runtime 20.007089 seconds", "input_count_rate 30760.328138 cps",
"output_count_rate 25555.342369 cps")

# ecriture des lignes d'en tête et création du fichier
writeLines(entete, "test.txt")

# écriture du data.frame à la suite
write.table(df, "test.txt", append = TRUE, row.names = FALSE, sep = "\t", quote = FALSE)
Cordialement,
Maxime

Arnaud de Coninck
Messages : 24
Enregistré le : 17 Fév 2015, 13:31
Contact :

Re: Ajouter du texte à un dataframe avant de l'exporter

Messagepar Arnaud de Coninck » 14 Sep 2021, 14:55

Bonjour Maxime,

Merci beaucoup pour réponse, ça fonctionne très bien.
Bonne journée
Cordialement
Arnaud


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité