Создание интервала для таблицы частот в R - PullRequest
1 голос
/ 14 января 2020

У меня есть фрейм данных, который я создал в форме

FREQ       CNT
0           5
1           20
2           1000
3           3
4           3

I want to further group my results to be in the following form:

CUT    CNT
0+1     25
2+3     1003
4+5     ...
.....

Я пытался использовать функции Между и Вырезать в dplyr, но он просто добавляет новый столбец интервалов в мой фрейм данных, может кто-нибудь дать мне хороший признак того, где go для достижения этой цели?

Ответы [ 2 ]

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

Вот способ сделать это в dplyr:

library(dplyr)

df <- df %>%
  mutate(id  = 1:n()) %>%
  mutate(new_freq = ifelse(id %% 2 != 0, paste0(FREQ, "+", lead(FREQ, 1)), paste0(lag(FREQ, 1), "+", FREQ)))

df <- df %>%
  group_by(new_freq) %>%
  mutate(new_cnt = sum(CNT)) 

unique(df[, 4:5])

# A tibble: 2 x 2
# Groups:   new_freq [2]
#  new_freq  new_cnt
#  <chr>      <int>
#1 0+1           25
#2 2+3         1003

data

df <- structure(list(FREQ = 0:3, CNT = c(5L, 20L, 1000L, 3L)), class = "data.frame", row.names = c(NA, -4L))
1 голос
/ 14 января 2020

Не элегантное решение с использованием dplyr ... возможно, лучший способ сделать это.

dat <- data.frame(FREQ = c(0,1,2,3,4), CNT = c(5,20,1000, 3, 3))

dat2 <- dat %>% 
  mutate(index = 0:(nrow(dat)-1)%/%2) %>% 
  group_by(index)

dat2 %>%
  summarise(new_CNT = sum(CNT)) %>%
  left_join(dat2 %>% 
              mutate(CUT = paste0(FREQ[1], "+", FREQ[2])) %>% 
              distinct(index, CUT),
            by = "index") %>% 
  select(-index)

# A tibble: 3 x 2
  new_CNT CUT  
    <dbl> <chr>
1      25 0+1  
2    1003 2+3  
3       3 4+NA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...