R 若组中有五行以上,则仅保留前五行
我有一个数据框,其中包含用户ID(因此我们按此分组),以及其他变量状态和日期 其中一些USERID的有5种以上的状态,因此我们应该在日期之前只保留最近的5种状态R 若组中有五行以上,则仅保留前五行,r,R,我有一个数据框,其中包含用户ID(因此我们按此分组),以及其他变量状态和日期 其中一些USERID的有5种以上的状态,因此我们应该在日期之前只保留最近的5种状态 我应该如何编码这个,看起来很简单,但我还没有做到。我们可以使用data.table。将“data.frame”转换为“data.table”(setDT(df1)),按“USERID”分组,我们对“date”进行降序排序(假设“date”列为dateclass),并获取头5行head library(data.table) setDT(
我应该如何编码这个,看起来很简单,但我还没有做到。我们可以使用
data.table
。将“data.frame”转换为“data.table”(setDT(df1)
),按“USERID”分组,我们对“date”进行降序排序(假设“date”列为date
class),并获取头5行head
library(data.table)
setDT(df1)[order(-date), head(.SD, 5), by=USERID]
或者正如注释中提到的@symbolX,我们也可以使用
.I
获取行索引,然后删除没有5行的组的NA行)
数据
set.seed(49)
df1我们可以使用data.table
。将“data.frame”转换为“data.table”(setDT(df1)
),按“USERID”分组,我们对“date”进行降序排序(假设“date”列为date
class),并获取头5行head
library(data.table)
setDT(df1)[order(-date), head(.SD, 5), by=USERID]
或者正如注释中提到的@symbolX,我们也可以使用.I
获取行索引,然后删除没有5行的组的NA行)
数据
set.seed(49)
df1如果你是dplyr的粉丝,你可以
library(dplyr)
df %>%
group_by(USERID) %>%
arrange(-date) %>%
slice(1:5) %>%
ungroup
在“大型”数据集上,data.table
方法可能会更快,但是dplyr
有一个稍微简单的语法,可以让你一开始就明白(在我看来)。如果你是dplyr
的粉丝,你可以这样做
library(dplyr)
df %>%
group_by(USERID) %>%
arrange(-date) %>%
slice(1:5) %>%
ungroup
在“大型”数据集上,data.table
方法可能会更快,但是dplyr
有一个稍微简单的语法,可以让你一开始就明白(在我看来)。还有df1[df1[order(-date),.I[1:5],by=userid]$V1][is.na(userid)]
我认为没有必要使用if
语句(head
提供尽可能多的行,但不超过限制)也df1[df1[order(-date),.I[1:5],by=userid]$V1[!is.na(userid)]
我认为没有必要使用if
语句(head
提供尽可能多的行,但不超过限制)请阅读关于和如何给出a的信息。这将使其他人更容易帮助你。我希望让新用户在第一次提问时有机会改进他们的问题,而不立即进行否决表决,否则会令人沮丧,可能会赶走新用户。仅是我个人的意见…请阅读关于a的信息d如何给出a。这将使其他人更容易帮助你。I如何让首次提问的新用户有机会改进他们的问题,而不立即进行否决表决,否则会令人沮丧,可能会赶走新用户。这只是我个人的意见。。。