расчет в пределах одной группы столбца

У меня есть кадр данных, подобный следующему:

names <- c("a", "b", "c","d","e","f", "g","h","i","j")
group_no <- c("A", "B", "C","D","E","D", "C","F","F","C")
amount <- c(10,10,3,6,10,4,6,2,8,1)

data.frame(names, group_no, amount)

Я хочу рассчитать процент одного и того же имени группы.

names <- c("a", "b", "c","d","e","f", "g","h","i","j")
group_no <- c("A", "B", "C","D","E","D", "C","F","F","C")
amount <- c(1,1,0.3,0.6,1,0.4,0.6,0.2,0.8,0.1)
out <- data.frame(names, group_no, amount)
out

person Md Ashraful Alam    schedule 16.10.2017    source источник
comment
Что вы пробовали? Что мешает вам это решить?   -  person twalbaum    schedule 16.10.2017
comment
В group_no некоторые 1 раз, некоторые 2 или 3 раза. если это 1 раз, вес равен 1, и если сумма делится на 2 или 3 group_no, вес также делится, поэтому я хочу рассчитать процент или вес.   -  person Md Ashraful Alam    schedule 16.10.2017


Ответы (2)


Вот решение с использованием пакета dplyr:

library(dplyr)

test %>% 
  group_by(group_no) %>% 
  mutate(prop = amount/sum(amount))

Source: local data frame [10 x 4]
Groups: group_no [6]

    names group_no amount  prop
   <fctr>   <fctr>  <dbl> <dbl>
1       a        A     10   1.0
2       b        B     10   1.0
3       c        C      3   0.3
4       d        D      6   0.6
5       e        E     10   1.0
6       f        D      4   0.4
7       g        C      6   0.6
8       h        F      2   0.2
9       i        F      8   0.8
10      j        C      1   0.1
person Jake Kaupp    schedule 16.10.2017

Мы можем использовать ave из base R

test$prop <- with(test, amount/ave(amount, group_no, FUN = sum))
test$prop
#[1] 1.0 1.0 0.3 0.6 1.0 0.4 0.6 0.2 0.8 0.1
person akrun    schedule 16.10.2017