Как создать столбец, который указывает, сколько раз появляется идентификатор?

#r #dataframe

#r #фрейм данных

Вопрос:

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

 ID     Frequency
111       4
205       2
603       6
111       4
 

В исходных данных 111 он появлялся 4 раза, 205 появлялся 2 раза и 603 появлялся 6 раз и т.д.

Комментарии:

1. df %>% group_by(ID) %>% summarise(N=n()) dplyr сначала загрузка!

2. @duck отличное решение. можно ли это сделать, не удаляя другие столбцы во фрейме данных?

3. Попробуйте df %>% group_by(ID) %>% mutate(N=n())

4. Сделано, большое спасибо за добросовестного пользователя.

5. Также вознагражден за то, что он честный пользователь!

Ответ №1:

Основываясь на комментариях @rogues77 и после первоначального указания подхода, решение может быть:

 library(dplyr)
#Code 1
newdf <- df %>% group_by(ID) %>% mutate(N=n())
#Code 2
newdf <- df %>% group_by(ID) %>% summarise(N=n())
 

Ответ №2:

С входными данными DF , воспроизводимыми в примечании в конце, используйте ave with length . Пакеты не используются.

 nr <- nrow(DF)
transform(DF, Freq = ave(1:nr, ID, FUN = length))
 

предоставление:

    ID Freq
1 111    2
2 205    1
3 603    1
4 111    2
 

или с помощью dplyr

 library(dplyr)
DF %>%
  group_by(ID) %>%
  mutate(Freq = n()) %>%
  ungroup
 

Примечание

 Lines <- "ID
111       
205       
603       
111       "
DF <- read.table(text = Lines, header = TRUE)
 

Ответ №3:

Мы также можем использовать data.table методы

 library(data.table)
setDT(DF)[, Freq := .N, ID]
 

данные

 DF <- structure(list(ID = c(111L, 205L, 603L, 111L)), class = "data.frame", 
    row.names = c(NA, 
-4L))