C'est frustrant, car il semble que cela devrait être si simple, mais c'est sucer des heures. Je souhaite obtenir les sommes de lignes pour une liste de colonnes dans une trame de données, mais cette liste - qui est définie par l'utilisateur - peut très bien être une longueur 1, c'est-à-dire un numéro de colonne.R: Somme des rangs pour 1 ou plusieurs colonnes
rowSums
ne permet pas de sommer 1 colonne.
rowsum
utilise un groupe que j'ai trouvé complètement indécrissable. J'ai joué avec l'exemple depuis des lustres et je n'ai toujours pas la moindre idée de quoi il s'agit, mais cela ne peut pas être omis. La meilleure réponse here utilise rowSums
ou apply
; la seconde utilise .SD
et lapply
mais utilise :=
et .SD
et d'autres termes qui n'apparaissent pas dans R help, et que je n'avais pas vu auparavant, ce qui ouvre juste un autre trou de ver de recherche et de confusion.
Alors: est-ce que je peux utiliser pour:
x <- matrix(runif(100), ncol = 5)
goodcols <- c(1,3,5)
y <- rowSums(x[,goodcols])
qui fonctionnerait avec 1 ou> 1 goodcols?
Merci d'avance. Actuellement, je suis à la recherche à l'aide:
ifelse(length(goodcols)>1,
y<-rowSums(x[,goodcols]),
y<-x[,goodcols])
il suffit d'utiliser 'goutte = FALSE' pour éviter x étant changé dans un vecteur quand il n'y a qu'une seule colonne. '.SD' et': = 'sont la syntaxe du paquet' data.table'. Une dernière chose, mettez 'y <- rowSums (x [, goodcols])' au lieu de 'y <- rowSums [, goodcols]', cela devrait fonctionner mieux ;-) (donc vous avez besoin de 'y <- rowSums (x [, goodcols, drop = F]) ') – Cath