Быстрые вычисления на подмножествах с R - PullRequest
0 голосов
/ 26 апреля 2018

и спасибо всем заранее.

У меня есть следующие данные:

set.seed(123)

    data <- data.frame (name=LETTERS[sample(1:26, 500, replace=T)],present=sample(0:1,500,replace = T))

И я хочу быстро рассчитать процент текущих наблюдений (1) для каждой буквы. Я могу сделать это вручную, но я считаю, что есть более простой способ сделать это:

library(dplyr)
A <- filter(data, name=="A" & present==1)
A2 <- filter(data, name=="A")
data$Percentage[data$name=="A"] <- nrow(A)/nrow(A2)

И так до тех пор, пока я не приду к "Z".

Можно ли выполнить эту задачу автоматически, не изменяя вручную значения столбца "name"?

С уважением,

1 Ответ

0 голосов
/ 26 апреля 2018

Мы можем использовать prop.table с table, чтобы получить пропорцию

prop.table(table(data), 1)[,2]

Чтобы добавить ее в виде столбца, мы можем расширить ее, сопоставив с «именами»

data$Percentage <- prop.table(table(data), 1)[,2][as.character(data$name)]

Или, как предложил @Lars Lau Raket, нам не нужно конвертировать в character

prop.table(table(data), 1)[,2][data$name]

Если нам нужно создать столбец

library(dplyr)
data %>%
     group_by(name) %>%
     mutate(Percentage = mean(present==1)) 
...