J'ai une table de 1024 lignes et plusieurs milliers de colonnes . Chaque colonne correspond à un spectre d'analyse pour un pas de mesure donné. Pour plus de facilité, j'ai simplifié le tout par la table suivante:
Code : Tout sélectionner
spe1 = c(1:5)
spe2 = c(1:5*2)
spe3 = c(1:5*3)
spe4 = c(1:5/2)
spe5 = c(1:5*2.6)
spe6= c(1:5/11)
spe7= c(1:5*6)
spe8= c(1:5-1.2)
spe9= c(1:5*3.3)
x = data.table(spe1,spe2, spe3, spe4,spe5,spe6,spe7,spe8,spe9)
x
Le but de ma démarche est de pouvoir sommer et/ou moyenner (selon besoin) les colonnes avec un pas qui peut être changé au besoin. C'est-à-dire je voudrais qu'il soit possible par exemple de faire la somme des lignes des 3 premières colonnes, puis des 3 suivante, ...et ainsi de suite jusqu'à la fin. Mais j'aimerais avoir la possibilité de modifier le pas si besoin (ex: faire la somme des colonnes de 1à 5, 6 à 10 .....). Le résultats de la première somme me donne un fichier texte nommé spe1 qui est structuré comme suit:
spe1
channel content
1 0
2 2
3 10
4 1
5 23
........
Donc pour ma table "x" seront compilés dans un nouveau dossier les nouveaux fichiers issus des différentes somme de colonne: nommé spe1 (somme des colonnes 1 à 3), spe2 (somme des col de 4 à 6) , spe3 ( col 7 à 9 ).
J'arrive manuellement à avoir ce que je veux pour la première somme (ici ex: colonne 1 à 3), mais je n'arrive pas automatiser le tout pour que le calcul continu avec les autres colonnes.
Code : Tout sélectionner
spe1<-rowSums(x[,1:3]) ## somme 1-3 et création d'une df
dfspe1<-as.data.frame(spe1)
names(dfspe1) <- c("content") ## on renomme spe1 : content
colnames(dfspe1)
# Création d'un nouveau fichier spectre
channel=c(1:9) ## Nouvelle colonne pour channel numérotation des lignes de 1 à 9
spe1 <- cbind(channel, dfspe1)
names(spe1) <- c("channel","content")
colnames(spe1)
J'ai essayé avec apply, lapply et boucle for, mais j'ai souvent un message d'erreur m'indiquant que le nombre de dimension est incorrect, ou "x doit être un tableau ayant au moins 2 dimensions, etc . C'est une histoire de matrice ou de vecteur, mais je ne suis pas assez avancé pour voir quel est le problème, ni même trouver la bonne méthode.
Voici ce que j'ai essayé,
Code : Tout sélectionner
# Vecteur qui contiendra la somme de tous les éléments
spee <- rep(NA, length(x))
# Boucle sur la table
for (i in 1:ncol(x)) {
spee [i] <- rowSums(x[i,1:3])
}
Si quelqu'un peut m'aider, ça serait fort apprécié.
Cordialement
Arnaud