Как разрезать вектор на ячейки, представленные их центрами - PullRequest
0 голосов
/ 24 января 2020

У меня есть какой-то вектор. Для целей этого примера давайте создадим единицу из равномерного распределения:

x <- runif(1000, 0, 1)

Теперь я хотел бы разделить вектор на n корзин (скажем, 10). Это просто с cut:

cut(x, 10)

, но я бы хотел, чтобы ячейки были представлены их центрами, а не диапазонами. Я пробовал следующее:

tapply(x, cut(x, 10), mean)

Но он возвращает вектор уникальных значений, и я хочу вектор размером n с каждым значением, назначенным для соответствующего бина (как в выводе cut, но представлены в виде центров). Как я могу это сделать?

Ответы [ 3 ]

1 голос
/ 24 января 2020

Мне нужен вектор размера n, в котором каждому значению присваивается соответствующий бин (как при выводе среза, но представлен в виде центров)

Вам просто нужно изменить tapply на ave.

ave(x, cut(x, 10), FUN = mean)

(я предполагаю, что n означает length(x) здесь, а не 10, поскольку tapply уже дает вам вектор длины 10.)

0 голосов
/ 24 января 2020

Вы имеете в виду что-то вроде ниже?

set.seed(1)
x <- runif(10000, 0, 1)

n <- 10
bin <- cut(x,seq(0,1,by = 1/n))
tapply(x, bin, mean)

такое, что

> tapply(x, bin, mean)
   (0,0.1]  (0.1,0.2]  (0.2,0.3]  (0.3,0.4] 
0.04969784 0.14970878 0.25173077 0.35135862 
 (0.4,0.5]  (0.5,0.6]  (0.6,0.7]  (0.7,0.8] 
0.44943688 0.54991184 0.65178575 0.75063907 
 (0.8,0.9]    (0.9,1] 
0.85072782 0.94989779 
0 голосов
/ 24 января 2020

Если я правильно понимаю ваш вопрос, вы хотите пометить различные ячейки их средствами вместо их диапазона. Это можно сделать, просто рассчитав средние значения различных значений в каждом бункере:

library(tidyverse)

tibble(
    x = runif(1000, 0, 1),
    bin = cut(x, 10)
  ) %>% 
  group_by(bin) %>% 
  summarize(
    mean = mean(x)
  )
#> # A tibble: 10 x 2
#>    bin               mean
#>    <fct>            <dbl>
#>  1 (0.00124,0.102] 0.0514
#>  2 (0.102,0.201]   0.148 
#>  3 (0.201,0.301]   0.253 
#>  4 (0.301,0.4]     0.349 
#>  5 (0.4,0.5]       0.451 
#>  6 (0.5,0.6]       0.548 
#>  7 (0.6,0.699]     0.648 
#>  8 (0.699,0.799]   0.746 
#>  9 (0.799,0.898]   0.849 
#> 10 (0.898,0.999]   0.950

Создано в 2020-01-24 с помощью пакета prex (v0.3.0 )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...