#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))