如何在R中的更多条件下删除行? 数据

我有会话ID,客户ID,转换列以及所有带有特定日期的信息。我要在最后一次购买客户后删除这些行。我的数据如下:

SessionId       ClientId        Conversion         Date
    1               1                0             05-01
    2               1                0             06-01
    3               1                0             07-01
    4               1                1             08-01
    5               1                0             09-01
    6               2                0             05-01 
    7               2                1             06-01
    8               2                0             07-01
    9               2                1             08-01
    10              2                0             09-01

我想要的输出为

SessionId       ClientId        Conversion         Date
    1               1                0             05-01
    2               1                0             06-01
    3               1                1             07-01
    6               2                0             05-01 
    7               2                1             06-01
    8               2                0             07-01
    9               2                1             08-01

我看起来很轻松,但是有一些条件。根据客户ID,需要删除上次购买用户后的会话。我有很多发现,因此无法在特定日期之后删除。它需要检查有人购买时的每个客户ID。

我不知道我需要使用哪种功能。也许是某种循环?

希望有人可以帮助我解决这个问题。

flh12004029 回答:如何在R中的更多条件下删除行? 数据

我们可以尝试

library(dplyr)
df1 %>%
     group_by(ClientId) %>%
     slice(seq_len(tail(which(Conversion == 1),1)))

数据

df1 <- structure(list(SessionId = 1:10,ClientId = c(1L,1L,2L,2L),Conversion = c(0L,0L,0L),Date = c("05-01","06-01","07-01","08-01","09-01","05-01","09-01")),class = "data.frame",row.names = c(NA,-10L))
,

如果您的数据已经按照Date进行了排序,那么对于每个ClientId,我们可以选择上一次转换之前的所有行。

这可以在基数R中完成:

subset(df,ave(Conversion == 1,ClientId,FUN = function(x) seq_along(x) <= max(which(x))))

使用dplyr

library(dplyr)
df %>% group_by(ClientId) %>% filter(row_number() <= max(which(Conversion == 1)))

data.table

library(data.table)
setDT(df)[,.SD[seq_len(.N) <= max(which(Conversion == 1))],ClientId]
本文链接:https://www.f2er.com/2333036.html

大家都在问