#r
Вопрос:
Я хотел бы знать долю событий по сайтам (т. Е. по группам), где «y» произошло хотя бы один раз.
Пример данных:
site event occurrence
A A01 y
A A01 n
A A02 n
A A02 n
A A03 y
B B01 y
B B01 n
B B02 n
B B02 n
Желаемый результат:
site event occurrence proporition
A A01 y 0.666
A A01 n 0.666
A A02 n 0.333
A A02 n 0.333
A A03 y 0.666
B B01 y 0.5
B B01 n 0.5
B B02 n 0.5
B B02 n 0.5
Так, на участке «А», а доля уникальных событий, по крайней мере, с одним случаем «У», составила 0,666.
На сайте «B», a доля уникальных событий, по крайней мере, с одним появлением «Y», составила 0,5.
Заранее благодарю вас!
Ответ №1:
С помощью data.table
:
library(data.table)
setDT(df)[, proporition:= uniqueN(event[occurrence == 'y'])/uniqueN(event), site]
df
# site event occurrence proporition
#1: A A01 y 0.6666667
#2: A A01 n 0.6666667
#3: A A02 n 0.6666667
#4: A A02 n 0.6666667
#5: A A03 y 0.6666667
#6: B B01 y 0.5000000
#7: B B01 n 0.5000000
#8: B B02 n 0.5000000
#9: B B02 n 0.5000000
Ответ №2:
Решение для разделения-Нанесения-комбинирования базового R:
do.call(rbind, lapply(with(df, split(df, site)),
function(x) {
n <- length(unique(x$event))
occurences <- sum(ifelse(x$occurrence == "y", 1, 0))
x$proporition <-
ifelse(x$occurrence == "y", (occurences / n), 1 - (occurences / n))
x
}
)
)
Ответ №3:
library(dplyr)
d %>%
group_by(site) %>%
mutate(props = n_distinct(event[occurrence == "y"])/n_distinct(event))
Комментарии:
1. Можете ли вы объяснить свой код, чтобы помочь вашему ответу?