R процентили кадра данных с ненулевым подмножеством наблюдений - PullRequest
0 голосов
/ 13 февраля 2019

Я хотел бы рассчитать процентили следующего тибла ...

У меня есть ненулевое подмножество из 10 наблюдений в каждой из 3 переменных, т. Е. ..

n <- 10
tibb <- tibble(
  x = 1:5, 
  y = 1, 
  z = x ^ 2 + y)

(Все исключенные наблюдения равны нулю)

Следовательно, среднее представляет собой сумму полей / 10 (в отличие от / 5):

meantibb  <-  tibb %>% group_by() %>% 
  summarise_if(is.numeric,  sum, na.rm = TRUE) / n
meantibb

Как получить следующие процентилиx, y и z в таблице, пожалуйста?

perciles <- c(0.5, 0.75)
percentiles <- function(p) quantile(p, perciles)

Спасибо

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Вы можете создать набор данных, включающий нули

missingRowCount <- n -  nrow(tibb)
colCount <- ncol(tibb)
zeroTibb <- matrix(rep(0, missingRowCount * colCount), ncol = colCount, nrow = missingRowCount) %>% as.tibble()
colnames(zeroTibb) <- colnames(tibb)
allTibb <- dplyr::bind_rows(tibb, zeroTibb)

Получив полные данные, вы можете выполнить следующую команду, чтобы получить столбец процентилей

percTibble = sapply(allTibb, percentiles) %>%
  as.tibble()

Предположение здесьявляется то, что данные не будут слишком большими, когда нули включены.

0 голосов
/ 13 февраля 2019

Вы близки, ваш метод создания среднего (и впоследствии процентилей) может быть проще, если вы сначала используете сбор, а затем группируете данные по трем различным факторам.

library(dplyr)
n <- 10
tibb <- tibble(x = 1:5, y = 1, z = x ^ 2 + y)
tibb %>% 
  gather("fctr", "value") %>% 
  group_by(fctr) %>% 
  summarise(mean = sum(value) / n,
            perc_50 = quantile(value, 0.5),
            perc_75 = quantile(value, 0.75))

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

> x = 1:5
> quantile(x, 0.1)
10% 
1.4 

> test <- c(0,0,0,0,0,1,2,3,4,5)
> quantile(test, 0.1)  
10% 
  0 
...