首页 > 解决方案 > 如何在 R 中排除具有相同 ID 的调查中的用户进行计算?

问题描述

我的 data.frame 包含调查结果,如下所示:

日期 ID 年龄 性别 ...
01-02 99 20 1 ...
01-20 52 34 2 ...
01-23 47 20 1 ...
01-02 100 56 1 ...
02-05 99 20 1 ...
02-17 78 18 2 ...
02-28 47 20 1 ...

用户每月被允许参加,最多10次参加调查,所以我有用户的个人数据出现在表中的频率更高。

现在我的问题是:如何获得参加调查的所有用户的平均值(例如年龄)?如果我只是说它的意思(df$age),显然那些不止一次参加的人将被过多地代表。

我怎样才能得到一个计算参加过一次、两次、...十次的用户的列表?例如:

参与次数 用户数
1 2,047
2 23,127
3 50,000

我还没有找到解决方案,所以我很感激任何帮助。提前致谢!

标签: r

解决方案


要获得参与者的平均年龄,您可以只保留唯一id的数据并计算平均值。

dplyr你可以用 and 来做到这distinct一点summarise

library(dplyr)

df %>%
  distinct(id, .keep_all = TRUE) %>%
  summarise(avg_age = mean(age))

#  avg_age
#1    29.6

要计算个人回复调查的次数,您可以使用count

df %>% count(id, name = 'count')

#   id count
#1  47     2
#2  52     1
#3  78     1
#4  99     2
#5 100     1

数据

如果您以可重现的格式提供数据,则更容易提供帮助

df <- structure(list(date = c("01-02", "01-20", "01-23", "01-02", "02-05", 
"02-17", "02-28"), id = c(99L, 52L, 47L, 100L, 99L, 78L, 47L), 
    age = c(20L, 34L, 20L, 56L, 20L, 18L, 20L), gender = c(1L, 
    2L, 1L, 1L, 1L, 2L, 1L)), row.names = c(NA, -7L), class = "data.frame")

推荐阅读