Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 不同行上具有条件的子集数据_R_Subset - Fatal编程技术网

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