r - 如何在不使用重复()或唯一()的情况下识别列中存在一次的观察?
问题描述
一般来说,我对观察使用不同服务的顺序感兴趣。特别是,我有兴趣识别数据集中出现一次的任何观察(按 ID),以便我可以识别那些只使用一次服务的观察。最终,我想确定只使用过两次服务的观察结果。在提供的数据集中,有一个观察 (Id=3370) 只使用了一次服务,一个观察 (Id=3360) 只使用了两次。
我已经尝试过重复()和唯一()
df=data.frame(Id=c(6431,6431,6431,6431,3066,3066,
3066,3371,3371,3371,3370,3360,3360),
Order=c(1,2,3,4,3,2,1,2,1,3,1,1,2),
Service=c("Coaching","Events","Fairs","Coaching",
"Coaching","Events","Fairs","Coaching",
"Events","Fairs","Coaching","Events","Coaching"))
> df
Id Order Service
1 6431 1 Coaching
2 6431 2 Events
3 6431 3 Fairs
4 6431 4 Coaching
5 3066 3 Coaching
6 3066 2 Events
7 3066 1 Fairs
8 3371 2 Coaching
9 3371 1 Events
10 3371 3 Fairs
11 3370 1 Coaching
12 3360 1 Events
13 3360 2 Coaching
当我运行 时!duplicated()
,它没有识别出我期望的 ID= 3370,因为这是唯一具有唯一 ID 的观察。
!duplicated(df$Id)
> !duplicated(df$Id)
[1] FALSE TRUE TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE FALSE FALSE TRUE
因此,什么代码可以识别出一个观察在这个数据集中只出现一次?当观察出现两次时,我如何将其扩展到?
解决方案
寻找table
?
> table(df$Id)
3066 3360 3370 3371 6431
3 2 1 3 4
您可以通过使用将此结果添加到现有的 data.frameave
> df$n <- with(df, ave(Id, Id, FUN=length))
> df
Id Order Service n
1 6431 1 Coaching 4
2 6431 2 Events 4
3 6431 3 Fairs 4
4 6431 4 Coaching 4
5 3066 3 Coaching 3
6 3066 2 Events 3
7 3066 1 Fairs 3
8 3371 2 Coaching 3
9 3371 1 Events 3
10 3371 3 Fairs 3
11 3370 1 Coaching 1
12 3360 1 Events 2
13 3360 2 Coaching 2
推荐阅读
- android - 执行搜索后没有得到正确的结果
- java - 来自 AJP 连接器后面的 Tomcat 与 HTTP Apache 的传出连接
- scikit-learn - 为什么 Sklearn LDA 主题模型总是建议(选择)主题最少的主题模型?
- javascript - 当数组的所有项目都为真时,javascript每个函数都返回假
- javascript - 我想阻止特殊字符并显示错误
- nginx - 用于 CORS 和正确 HTTPS 重新路由的 NGINX 配置
- docker - 无法在 GoogleCP Vision AutoML 模型中使用导出模型运行 docker
- c++ - GitHub 持续集成 CMake/C++
- angular - Angular 9 无法引用我在自定义类型定义文件中声明的全局类型
- sql - 在 SQL 中使用一组定义的字符查找数据