r - 如何在 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 |
我还没有找到解决方案,所以我很感激任何帮助。提前致谢!
解决方案
要获得参与者的平均年龄,您可以只保留唯一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")
推荐阅读
- python - 如何修复 'TypeError: unhashable type: 'list' 错误?
- java - 如何在 Java 中使用 POST/GET http 方法发送/获取数据 - REST API
- angular - 使用响应式表单和 ChangeDetectionStrategy.OnPush 显示验证消息
- firebase - 如何在 Web CMS 中隐藏文档字段,但在 android 和 iOS 中不隐藏
- javascript - Electron 中的 renderer.js 有什么特别之处吗?
- javascript - 将数组值转换为对象,根据索引位置添加键
- ruby - 为什么用于在本地选择文件的相同命令在 CircleCI 中不起作用?
- graphql - 基于字段特定值的 GraphQL 查询
- python - 是否可以使用 Python 绘制 R glmer 模型预测?
- docker - couchbase docker 端口 8091 有 301 重定向