如何切片数据帧行并获得R中的最大行数?

如何切片数据帧行并获得R中的最大行数?,r,dataframe,slice,R,Dataframe,Slice,从下面的数据框中,我需要获得唯一的记录,特别是创建日期,其中的列为p01、p02、p03等于100。因此,在结果数据帧中,我将得到ID为(3,6,11,14,19,24,25,26,28…)的行 Id创建日期p01 p02 p31组合字段 2016-06-01 18:38:20.081100不适用 3 2016-06-01 19:25:54.7331000 NA p01\U 100 6 2016-06-02 02:10:01.696 00 NA p02_100 7 2016-06-02 02:3

从下面的数据框中,我需要获得唯一的记录,特别是创建日期,其中的列为p01、p02、p03等于100。因此,在结果数据帧中,我将得到ID为(3,6,11,14,19,24,25,26,28…)的行

Id创建日期p01 p02 p31组合字段 2016-06-01 18:38:20.081100不适用 3 2016-06-01 19:25:54.7331000 NA p01\U 100 6 2016-06-02 02:10:01.696 00 NA p02_100 7 2016-06-02 02:36:05.958 100 NA p01\U 100 8 2016-06-02 02:36:35.263 100 NA p01\U 100 11 2016-06-02 16:14:48.259 100 NA p01\U 100 14 2016-06-02 21:30:46.163 0 100 NA p02_100 15 2016-06-02 22:45:30.451100不适用 19 2016-06-04 04:19:51.6531000 NA p01_100 24 2016-06-06 00:04:39.383 0 100 NA p02_100 25 2016-06-06 09:02:14.595 100 NA p01\U 100 26 2016-06-06 09:43:00.552 00 NA p02_100 28 2016-06-07 09:06:43.859 00 NA p02_100 2016-06-07 21:16:00.166 100 NA p01\U 100 33 2016-06-08 10:47:14.24 35 2016-06-09 09:40:26.4291000 NA p01\U 100 39 2016-06-09 23:08:28.582 0 100 NA p02_100 41 2016-06-13 05:31:34.209 0 100 NA p02_100 44 2016-06-13 21:38:16.356100不适用 ... 我尝试将p01、p02、p03组合到组合字段中,以便对它们进行分组


所需数据使用dplyr

library(dplyr)
df %>% # Your data frame as in the post
  group_by(combined_field) %>%
  filter(CREATION_DATE == max(CREATION_DATE)) 
  # Assuming that your date-time variables belongs appropriate time class
使用dplyr

library(dplyr)
df %>% # Your data frame as in the post
  group_by(combined_field) %>%
  filter(CREATION_DATE == max(CREATION_DATE)) 
  # Assuming that your date-time variables belongs appropriate time class

我们可以使用
slice

library(dplyr)
df %>%
   group_by(combined_field) %>%
   slice(which.max(CREATION_DATE))
更新 根据OP的评论,这可能有帮助吗

library(data.table)
setDT(df)[df[, .I[which.max(CREATION_DATE)],rleid(p01, p02)]$V1]
#    Id       CREATION_DATE p01 p02 p31 combined_field
#1:  3 2016-06-01 19:25:54 100   0  NA        p01_100
#2:  6 2016-06-02 02:10:01   0 100  NA        p02_100
#3: 11 2016-06-02 16:14:48 100   0  NA        p01_100
#4: 14 2016-06-02 21:30:46   0 100  NA        p02_100
#5: 19 2016-06-04 04:19:51 100   0  NA        p01_100
#6: 24 2016-06-06 00:04:39   0 100  NA        p02_100
#7: 25 2016-06-06 09:02:14 100   0  NA        p01_100
#8: 28 2016-06-07 09:06:43   0 100  NA        p02_100
#9: 35 2016-06-09 09:40:26 100   0  NA        p01_100
#10:41 2016-06-13 05:31:34   0 100  NA        p02_100
#11:44 2016-06-13 21:38:16 100   0  NA        p01_100

我们可以使用
slice

library(dplyr)
df %>%
   group_by(combined_field) %>%
   slice(which.max(CREATION_DATE))
更新 根据OP的评论,这可能有帮助吗

library(data.table)
setDT(df)[df[, .I[which.max(CREATION_DATE)],rleid(p01, p02)]$V1]
#    Id       CREATION_DATE p01 p02 p31 combined_field
#1:  3 2016-06-01 19:25:54 100   0  NA        p01_100
#2:  6 2016-06-02 02:10:01   0 100  NA        p02_100
#3: 11 2016-06-02 16:14:48 100   0  NA        p01_100
#4: 14 2016-06-02 21:30:46   0 100  NA        p02_100
#5: 19 2016-06-04 04:19:51 100   0  NA        p01_100
#6: 24 2016-06-06 00:04:39   0 100  NA        p02_100
#7: 25 2016-06-06 09:02:14 100   0  NA        p01_100
#8: 28 2016-06-07 09:06:43   0 100  NA        p02_100
#9: 35 2016-06-09 09:40:26 100   0  NA        p01_100
#10:41 2016-06-13 05:31:34   0 100  NA        p02_100
#11:44 2016-06-13 21:38:16 100   0  NA        p01_100

你能把你的数据和样本预期输出的
dput
放进去吗?根据描述的逻辑和你想提取的行,这不清楚。@jeremycg我想根据OP的评论,dupe链接可能不是他/她想要的答案seeks@jeremycg,问题并非重复。我对问题进行了编辑,以使其更加清晰。你能删除重复标记吗?你能把你的数据和样本预期输出的
dput
放进去吗?根据描述的逻辑和你想提取的行,不清楚。@jeremycg我想根据OP的评论,重复链接可能不是他/她想要的答案seeks@jeremycg,问题并非重复。我对问题进行了编辑,以使其更加清晰。你能删除重复的标签吗?这只给出了3个变量的最大创建日期。但我试图在100个值变为不同变量(p01、p02、p31)之前获得最长的创建日期,我觉得这很难实现。组合_字段是一个计算值,但实际上不是必需的,而是我试图解决问题的中间步骤。@parishodak看起来您的帖子被不正确地复制了。这只给出了3个变量的最大创建日期。但我试图在100个值变为不同变量(p01、p02、p31)之前获得最长的创建日期,我觉得这很难实现。combined_字段是一个计算值,但它实际上不是必需的,而是我试图解决问题的中间步骤。@parishodak看起来你的帖子被不正确地链接了。