Рассчитать условную долю в R - PullRequest
0 голосов
/ 30 марта 2020

Рассмотрим следующий фрейм данных:

d <- data.frame(a = c("s10","s10","s10","s20","s30"),
                b = c("t10","t40","t30","t20","t60"))

Я хочу получить следующие данные из этого фрейма данных:

    a   b   c
1:  s10 t10 0.33
2:  s10 t40 0.33
3:  s10 t30 0.33
4:  s20 t20 1
5:  s30 t60 1

То есть, если значение из столбца a принадлежит несколько значений в столбце b, то я хочу рассчитать долю. Например, для "s10" в столбце a в столбце b есть три значения ("t10", "t40" и "t30"), поэтому значение в столбце 3 должно быть: 1/3 = 0,33.

Ответы [ 3 ]

2 голосов
/ 30 марта 2020

Мы можем использовать data.table

library(data.table)
setDT(d)[, c := 1/.N, a]
1 голос
/ 30 марта 2020

Еще один вариант без библиотек:

d$c <- ave(1:nrow(d), d$a, FUN=function(x) 1/length(x))
1 голос
/ 30 марта 2020

Может быть так:

library(dplyr)
d %>% group_by(a) %>% mutate(c=1/n())
# A tibble: 5 x 3
# Groups:   a [3]
  a     b         c
  <fct> <fct> <dbl>
1 s10   t10   0.333
2 s10   t40   0.333
3 s10   t30   0.333
4 s20   t20   1    
5 s30   t60   1  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...