Есть ли способ в функции R, чтобы перебрать каждую строку со значением ячейки строки в качестве аргумента? - PullRequest
1 голос
/ 27 сентября 2019

Я хотел бы рассчитать процент элементов строки, используя значение той же строки

Мой фрейм данных выглядит следующим образом

     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

Теперь я хотел бы рассчитать процентa, b, c, d и e

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

Возможно ли это применить, или есть лучший способ добиться этого?

1 Ответ

0 голосов
/ 27 сентября 2019

Если мы хотим сделать это векторизованным

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

Если мы проверяем сумму элементов для вычисления процента

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

data

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"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...