Как получить самые низкие и самые высокие значения для интервала класса - PullRequest
1 голос
/ 23 марта 2020

Мои данные выглядят как следующие данные:

df<-read.table(text = "temp
12
15
12
6
9
11
15
14
14
16
14
14
11
12
13
14
10
12
12
14
9
13
12
15
11
11
12
12
10
11",header=TRUE)

Я хочу получить самый низкий и самый высокий уровни для вычисления температуры совокупного.

Я сделал следующие коды:

library(purrr)
library(dplyr)
map(names(df),~df %>% 
count(!!rlang::sym(.x)%>% 
mutate(cum=cumsum(temp)/sum(temp)))

Как видите, это дает нам временные значения 6,9,10,11,12,13,14,15,16, но 7 и 8 отсутствуют.

I хотите иметь следующий вывод:

temp    n   cum
6   x   x
7   0   x
8   0   x
9   x   x
10  x   x
11  x   x
12  x   x
13  x   x
14  x   x
15  x   x
16  x   x

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

В базе R вы можете использовать table для получения df2, match частот within нового data.frame из температуры range, где вы устанавливаете NA в ноль, и рассчитываете cumsum.

df2 <- data.frame(table(df$temp))
rg <- range(df$temp)
res <- within(data.frame(temp=rg[1]:rg[2]), {
  n <- df2[match(temp, df2$Var1), "Freq"]
  n[is.na(n)] <- 0
  cum=cumsum(n/sum(n))
})[c(1, 3, 2)]
res
#    temp n        cum
# 1     6 1 0.03333333
# 2     7 0 0.03333333
# 3     8 0 0.03333333
# 4     9 2 0.10000000
# 5    10 2 0.16666667
# 6    11 5 0.33333333
# 7    12 8 0.60000000
# 8    13 2 0.66666667
# 9    14 6 0.86666667
# 10   15 3 0.96666667
# 11   16 1 1.00000000
0 голосов
/ 23 марта 2020

Мы можем использовать complete для заполнения отсутствующей последовательности в temp и fill значении cum.

library(dplyr)
library(tidyr)

df %>% 
 count(temp) %>% 
 mutate(cum=cumsum(n)/sum(n)) %>%
 complete(temp = seq(min(temp), max(temp)), fill = list(n = 0)) %>%
 fill(cum)

# A tibble: 11 x 3
#    temp     n    cum
#   <int> <dbl>  <dbl>
# 1     6     1 0.0333
# 2     7     0 0.0333
# 3     8     0 0.0333
# 4     9     2 0.1   
# 5    10     2 0.167 
# 6    11     5 0.333 
# 7    12     8 0.6   
# 8    13     2 0.667 
# 9    14     6 0.867 
#10    15     3 0.967 
#11    16     1 1     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...