Je voudrais calculer le pourcentage d'éléments de ligne en utilisant une valeur de la même ligne

Ma trame de données ressemble à ceci

     Group.1   a      b    c        d      e   total
1     test1  470.0 5696.0 393.5    0.5    8.0 6568.0
2     test2  646.0 5376.0 279.0    0.5    9.5 6311.0
3     test3  855.0 5279.5 297.0    0.5   11.0 6443.0
4     test4  660.5 7472.0 201.0   11.5  481.5 8826.5
5     test5   87.0 3900.0 119.0   11.5  491.5 4609.0

Maintenant, je voudrais calculer le pourcentage de a,b,c,d et e

percentage <- t(apply(mydata[-c(1,7)], 1, FUN = function(x) x / Here im not sure how to access the right cell ))

Est-ce possible en utilisant apply ou existe-t-il un meilleur moyen d'y parvenir?

r
1
Max_ 27 sept. 2019 à 20:19

1 réponse

Meilleure réponse

Si nous voulons faire cela vectorisé

percentage <- mydata[-c(1, 7)]/mydata$total
percentage
#          a         b          c            d           e
#1 0.07155907 0.8672351 0.05991169 7.612667e-05 0.001218027
#2 0.10236096 0.8518460 0.04420852 7.922675e-05 0.001505308
#3 0.13270216 0.8194164 0.04609654 7.760360e-05 0.001707279
#4 0.07483147 0.8465417 0.02277233 1.302895e-03 0.054551634
#5 0.01887611 0.8461705 0.02581905 2.495118e-03 0.106639184

Si nous vérifions la somme des éléments pour calculer le pourcentage

rowSums(mydata[-c(1, 7)])/mydata$total

Les données

mydata <- structure(list(Group.1 = c("test1", "test2", "test3", "test4", 
"test5"), a = c(470, 646, 855, 660.5, 87), b = c(5696, 5376, 
5279.5, 7472, 3900), c = c(393.5, 279, 297, 201, 119), d = c(0.5, 
0.5, 0.5, 11.5, 11.5), e = c(8, 9.5, 11, 481.5, 491.5), total = c(6568, 
6311, 6443, 8826.5, 4609)), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5"))
0
akrun 27 sept. 2019 à 17:28