как сгруппировать значения в меньшие наборы значений в наборе данных? - PullRequest
0 голосов
/ 04 апреля 2020

В основном у меня есть один набор данных из 53 значений. я пытаюсь добиться их объединения в наборы, основанные на разнице в 400 баллов, в диапазоне от ~ 500 до 4500. При необходимости вы можете просто расплывчато и указать для этого функцию, а остальное я могу решить

Ответы [ 3 ]

1 голос
/ 04 апреля 2020

A dplyr опция

library(dplyr)
df_test <- data.frame(x = runif(1000, 400, 5000),
                      y = rep("A", 1000))

df_test <- df_test %>% 
  mutate(bins = case_when(between(x, 400, 800) ~ "Set 1",
                          between(x, 801, 1600) ~ "Set 2",
                          between(x, 1601, 5000) ~ "Set 3"))
head(df_test)
              x y  bins
    1 1687.2854 A Set 3
    2 3454.1035 A Set 3
    3 4979.5434 A Set 3
    4  796.6475 A Set 1
    5 3665.7444 A Set 3
    6 3083.8969 A Set 3

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

0 голосов
/ 04 апреля 2020

Привет, я бы сделал это так:

data$group<-cut(data$value,
               breaks = seq(0,4500,500),
               labels = paste("Group",LETTERS[1:9], sep="_"))

или, если вы предпочитаете более базовый c стиль использования R []:

under_500<-data[data$value<500 ,]

over500_under900<-data[data$value %in% 501:900 ,]
## etc..
over4000<-data[data$value>4000 ,]

0 голосов
/ 04 апреля 2020

Вот базовый подход R, который использует cut с breaks =, определенным с заранее определенным seq.

set.seed(1)
data <- runif(n=53,500,4500)
groups <- as.integer(cut(data,c(-Inf,seq(500,4500,by=400),Inf))) 
data.frame(data,groups)
      data groups
1 1562.035      4
2 1988.496      5
3 2791.413      7
4 4132.831     11
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...