R 根据列值保留前几个重复项

R 根据列值保留前几个重复项,r,tidyr,R,Tidyr,我有一个包含5列的时间序列数据。第一列是用户名,其余是不同时间点的值。此处显示的样本数据- 我希望保留任何给定用户的前3个值,并删除其余值。因此,对于每个给定的用户,数据集中最多有3条记录。我试过以下方法,但似乎不起作用。请给我指出正确的方向,因为我找不到任何好的方法。 data%%>%group\u by(用户)%%>%top\u n(3) dput(数据[1:10,])的输出为 structure(list(User = c("mmcclafl", "mmcclafl", "mmcclafl

我有一个包含5列的时间序列数据。第一列是用户名,其余是不同时间点的值。此处显示的样本数据-

我希望保留任何给定用户的前3个值,并删除其余值。因此,对于每个给定的用户,数据集中最多有3条记录。我试过以下方法,但似乎不起作用。请给我指出正确的方向,因为我找不到任何好的方法。
data%%>%group\u by(用户)%%>%top\u n(3)

dput(数据[1:10,])
的输出为

structure(list(User = c("mmcclafl", "mmcclafl", "mmcclafl", "mmcclafl", 
"mmcclafl", "mmcclafl", "gsnabwez", "gsnabwez", "gsnabwez", "gsnabwez"
), StartTime = c(584.93, 584.93, 584.93, 584.93, 584.93, 584.93, 
1501.26, 1501.26, 1501.26, 1501.26), Time = c(597.94, 675.28, 
774.02, 843.05, 1093.79, 1142.85, 1510.94, 1582.81, 1665.26, 
1689.91), SelfReport = c("FLOW", "FLOW", "FLOW", "FRUSTRATION", 
"FRUSTRATION", "FRUSTRATION", "FLOW", "FRUSTRATION", "FRUSTRATION", 
"FRUSTRATION"), Affectiva = c("BOREDOM", "BOREDOM", "BOREDOM", 
"BOREDOM", "BOREDOM", "BOREDOM", "BOREDOM", "BOREDOM", "OTHER", 
"BOREDOM")), row.names = c(1L, 2L, 3L, 4L, 5L, 6L, 8L, 9L, 10L, 
11L), class = "data.frame")

您可以通过执行以下操作为每个组选择前3行

使用
dplyr

library(dplyr)
data %>% group_by(User) %>% slice(1:3)

#  User     StartTime  Time SelfReport  Affectiva
#  <chr>        <dbl> <dbl> <chr>       <chr>    
#1 gsnabwez     1501. 1511. FLOW        BOREDOM  
#2 gsnabwez     1501. 1583. FRUSTRATION BOREDOM  
#3 gsnabwez     1501. 1665. FRUSTRATION OTHER    
#4 mmcclafl      585.  598. FLOW        BOREDOM  
#5 mmcclafl      585.  675. FLOW        BOREDOM  
#6 mmcclafl      585.  774. FLOW        BOREDOM  

您是否可以使用
dput(df)
更新您的帖子,并显示共享数据的预期输出?有没有更好的方法。我的实际数据包含数千行,如果我这样做,将会非常乏味。第二个选项比第一个好,group_by会扰乱数据的原始顺序
subset(data, ave(StartTime, User, FUN = seq_along) <= 3)
library(data.table)
setDT(data)[, .SD[1:3], by=User]