首页 > 解决方案 > 如何在不使用重复()或唯一()的情况下识别列中存在一次的观察?

问题描述

一般来说,我对观察使用不同服务的顺序感兴趣。特别是,我有兴趣识别数据集中出现一次的任何观察(按 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

因此,什么代码可以识别出一个观察在这个数据集中只出现一次?当观察出现两次时,我如何将其扩展到?

标签: rduplicates

解决方案


寻找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

推荐阅读