2017-05-14 3 views
-1

Tenir compte de ce codelapply, rowSums et arguments passign

lapply(lst,rowSums) 

lst est une liste de cinq trames de données. Chaque trame de données a, par exemple, quatre colonnes et dix lignes. Je veux ajouter les valeurs des colonnes dans chaque ligne, cependant, je ne veux pas inclure la valeur de colonne un dans la somme.

je peux utiliser une boucle for et le code ci-dessous:

lst_sum = list() 
for (ii in c(1,5)) 
{ 
dummy <- lst[[ii]] 
dummy <- rowSums(dummy[,seq(2,4,by = 1)]) 
lst_sum[[ii]] = dummy 
} 

Je voudrais utiliser lapply ou une fonction similaire parce que je pense que les boucles for semble laid et inefficace.

+1

Essayez quelque chose comme 'lapply (LST, fonction (x) rowSums (x [-1]))'? Exemple plus reproductible pour ce dont vous avez besoin: 'df <- data.frame (x = 1:10, y = 1:10, z = 1:10); l = liste (df, df, df, df, df); lapply (l, function (x) rowSums (x [, -1])); ' – Gopala

+0

Vouliez-vous dire' Reduce ("+", lst) 'Ce n'est pas clair sans un exemple reproductible Ou essayez' lapply (lapply (lst, "[", -1), rowSums) ' – akrun

Répondre

0

Avec l'aide de commentaires que j'obtenu cette solution:

lapply(lst,function(x) rowSums(x[,seq(2,4,by = 1)]))