如何根据 r 中的条件使用选定的行创建新的 df?
How do I make a new df with selected rows based on a condition in r?
我有一个包含许多会话的 df,这将导致转换。我想用包含转换的所有行创建一个新的 df。
我的 df 看起来像:
Sessionid Clientid Conversion_type
1 1 No_conv
2 1 No_conv
3 1 Online
4 2 No_conv
5 2 Offline
我想要一个新的 df,如下所示:
Session Id Clientid Conversion_type
3 1 Online
5 2 Offline
还有一个日期列,所以我想如果我在 Client_id 上订购,它会自动在这些 ID 的日期订购。然后,我可以 select 包含 Clientid 尾部值的行。但是,这不起作用。
我希望有人能帮我解决这个问题。
我们可以使用比较运算符来获取 'Conversion_type' 不等于 'No_conv'
的行的子集
df2 <- subset(df1, Conversion_type != 'No_conv')
df2
# Sessionid Clientid Conversion_type
#3 3 1 Online
#5 5 2 Offline
或者如果它是基于位置的,即需要每个 'Clientid' 的最后一行,使用 duplicated
在 subset
中创建一个逻辑向量以对行 [=19] 进行子集化=]
subset(df1, !duplicated(Clientid, fromLast = TRUE))
# Sessionid Clientid Conversion_type
#3 3 1 Online
#5 5 2 Offline
或使用 dplyr
,我们可以按 'Clientid' 和 slice
最后一行 (n()
)
进行分组
library(dplyr)
df1 %>%
group_by(Clientid) %>%
slice(n())
数据
df1 <- structure(list(Sessionid = 1:5, Clientid = c(1L, 1L, 1L, 2L,
2L), Conversion_type = c("No_conv", "No_conv", "Online", "No_conv",
"Offline")), class = "data.frame", row.names = c(NA, -5L))
我有一个包含许多会话的 df,这将导致转换。我想用包含转换的所有行创建一个新的 df。
我的 df 看起来像:
Sessionid Clientid Conversion_type
1 1 No_conv
2 1 No_conv
3 1 Online
4 2 No_conv
5 2 Offline
我想要一个新的 df,如下所示:
Session Id Clientid Conversion_type
3 1 Online
5 2 Offline
还有一个日期列,所以我想如果我在 Client_id 上订购,它会自动在这些 ID 的日期订购。然后,我可以 select 包含 Clientid 尾部值的行。但是,这不起作用。
我希望有人能帮我解决这个问题。
我们可以使用比较运算符来获取 'Conversion_type' 不等于 'No_conv'
的行的子集df2 <- subset(df1, Conversion_type != 'No_conv')
df2
# Sessionid Clientid Conversion_type
#3 3 1 Online
#5 5 2 Offline
或者如果它是基于位置的,即需要每个 'Clientid' 的最后一行,使用 duplicated
在 subset
中创建一个逻辑向量以对行 [=19] 进行子集化=]
subset(df1, !duplicated(Clientid, fromLast = TRUE))
# Sessionid Clientid Conversion_type
#3 3 1 Online
#5 5 2 Offline
或使用 dplyr
,我们可以按 'Clientid' 和 slice
最后一行 (n()
)
library(dplyr)
df1 %>%
group_by(Clientid) %>%
slice(n())
数据
df1 <- structure(list(Sessionid = 1:5, Clientid = c(1L, 1L, 1L, 2L,
2L), Conversion_type = c("No_conv", "No_conv", "Online", "No_conv",
"Offline")), class = "data.frame", row.names = c(NA, -5L))