R 不同行上具有条件的子集数据
我试图根据不同行中的条件对数据进行子集划分。 换句话说,我想对访问商店R 不同行上具有条件的子集数据,r,subset,R,Subset,我试图根据不同行中的条件对数据进行子集划分。 换句话说,我想对访问商店A和商店B的客户进行细分 以下是一个例子: dfrm <- data.frame(cust_id=sample(c(1:3),5,replace = TRUE), store=sample(LETTERS[1:2],5,replace = TRUE)) > dfrm cust_id store >> 3 B >>
A
和商店B
的客户进行细分
以下是一个例子:
dfrm <- data.frame(cust_id=sample(c(1:3),5,replace = TRUE),
store=sample(LETTERS[1:2],5,replace = TRUE))
> dfrm
cust_id store
>> 3 B
>> 3 A
>> 1 B
>> 1 B
>> 2 B
使用dplyr
软件包,
你可以做:
dfrm %>% group_by(cust_id) %>% filter(n_distinct(store,na.rm=T)==2)
返回访问两个不同商店的客户:
cust_id store
<dbl> <fctr>
1 3 B
2 3 A
cust\u id存储
13b
23A
为了完整起见,这里还有两个数据。表
解决方案:
第一个返回访问了两个不同商店的所有客户的dfrm
的所有行:
cust_id store
<dbl> <fctr>
1 3 B
2 3 A
这也是所做的,但对于一个80k行的数据集,速度大约快25%
第二个返回访问不同商店的最大数量的所有客户的dfrm
的所有行(在给定的玩具数据样本中也是2个):
这也是同样的功能,但对于一个80 k行的数据集,速度大约快15倍。可能重复SRAFA,我已经查看了您链接的问题,我认为它没有回答我的问题(可能我遗漏了什么)@拉米娅已经解决了我的问题,但不管怎样,我添加了一个可复制的数据集。由于未包含set.seed
,因此无法复制。假设cust\u id
有两个B
-值和一个A
-值。然后,您希望保留哪些值?保留访问所有门店的客户的所有观察结果的基本R解决方案是dfrm[as.logical(ave(as.character(dfrm$store),dfrm$cust\u id,FUN=function(x)all(unique(as.character(dfrm$store)),]
。
library(data.table)
setDT(dfrm)[, .SD[uniqueN(store) == 2L], by = cust_id]
# cust_id store
#1: 3 B
#2: 3 A
setDT(dfrm)[, .SD[uniqueN(store) == uniqueN(dfrm[["store"]])], by = cust_id]
# cust_id store
#1: 3 B
#2: 3 A