首页 > 解决方案 > 循环仅检查 R 中向量的最后一个值

问题描述

我在 R 中很新,我认为我的问题很简单,但我希望有人能帮助我。

我制作了一个包含已转换的唯一客户 ID 的向量。此外,我有一个包含所有客户 sessionid 的 df,因此已转换和未转换的客户。

我想创建一个新的 df,它只包含已转换的客户端 ID 的会话。为此,我认为循环将是一个很好的解决方案。但是,它只检查向量的最后一个值。

我使用的代码:

#Create vector that contains unique client id's that converted
Client_id_conversion_vector <- unique(Test$ClientId)

#Loop that creates new df 
for (i in (Client_id_conversion_vector)){ 
  Sessions_of_clients_who_converted <- (Sessions[Sessions$ClientId== i ])
  }

我添加一个示例以使其更清楚:

Sessions    ClienID     Conversion
1              1             No
2              1             No
3              2             No
4              2            Yes
5              3             No
6              3             Yes

最后我想要类似的东西:

Sessions    ClienID     Conversion
3              2             No
4              2            Yes
5              3             No
6              3             Yes

所以我想用所有转换过的客户的会话创建一个新的df。

感谢您提前提供帮助!

标签: rloopsvector

解决方案


一个班轮:

#data
sessions <- 1:6
client <- 1:3
client <- sort(append(client,client))
conversion <- c("No","No","No","Yes","No","Yes")
df <- data.frame(sessions,client,conversion)

一条线回答

df[df$client %in% unique(df$client[df$conversion == "Yes"]),]

一步步

获取已转换客户的列表,我假设您可能有重复的值并使用唯一的

index <- unique(df$client[df$conversion == "Yes"])

为转换的客户过滤数据框

df[df$client %in% index,]

推荐阅读