Я пытаюсь получить частоты, но мои идентификаторы повторяются. Вот пример данных:
id <- c(1,1,2,2,3,3)
gender <- c("m","m","f","f","m","m")
score <- c(10,5,10,5,10,5)
data <- data.frame("id"=id,"gender"=gender, "score"=score)
> data
id gender score
1 1 m 10
2 1 m 5
3 2 f 10
4 2 f 5
5 3 m 10
6 3 m 5
Я хотел бы получить частоты гендерных категорий, но у меня есть повторяющиеся идентификаторы. Когда я запускаю этот код ниже:
gender<-as.data.frame(table(data$gender))
> gender
Var1 Freq
1 f 2
2 m 4
Частота должна быть женской = 1, мужской = 2. это должно выглядеть так, как показано ниже:
> gender
Var1 Freq
1 f 1
2 m 2
Как я могу получить это, учитывая информацию об идентификаторе?
Вы можете использовать data.table::uniqueN
для подсчета количества уникальных идентификаторов для каждой гендерной группы.
library(data.table)
setDT(data)
data[, .(Freq = uniqueN(id)), gender]
# gender Freq
# 1: m 2
# 2: f 1
Идея от @IceCreamToucan с dplyr
:
data %>%
group_by(gender) %>%
summarise(freq = n_distinct(id))
gender freq
<fct> <int>
1 f 1
2 m 2
по какой-то причине я получаю общую частоту, а не частоту для каждой категории с вашим кодом.
Это странно. Попробуйте обновиться до последней версии dplyr
.
В базе R
rowSums(table(data$gender,data$id)!=0)
f m
1 2
Опоздав на вечеринку, я был очень удивлен сложными ответами, в которых используется группировка или rowSums()
.
В базе R я бы
id
из data.frame, подставив подмножество с помощью duplicated(id)
,table()
к столбцу gender
.Итак, код
table(data[duplicated(data$id), "gender"])
f m 1 2
Сначала вам нужно однозначно идентифицировать комбинации id-gender. Тогда сделайте свой стол. Вот один из способов:
table(unique(data[ , c("id", "gender"))$gender)