[英]What is the elegant way to select n latest (by date) entries in data.frame in R?
我有以下数据框(仅作为示例)
Date StudentID Gender Grade
在某种意义上说,数据帧是不平衡的,男性比女性多得多。 我需要从数据框中选择所有女性和具有最新日期条目的相同数量的男性。 日期以日期类型给出。 数据框未排序,并且可能有多个行具有相同的日期。 执行此任务的最优雅方式是什么?
假设dat
是您的数据框,并且按Date
排序,则可以使用:
rbind(tail(dat[dat&Gender=="Male",], 10),
tail(dat[dat&Gender=="Female",], 10))
要么:
library(data.table)
setDT(dat)[, tail(.SD, 10) , by = Gender]
要么:
library(dplyr)
dat %>% group_by(Gender) %>% do(tail(., 10))
每个小组将为两个小组选择最后10个案件。
这是为男性创建数据框的方法:
# subset all male records
df1 <- df[df$Gender == 'Male', ]
# sort by date in descending order (most recent first)
df2 <- df1[rev(order(df1$Date)),]
# retain same number of rows as number of females
df.male <- df2[1:sum(df$Gender == 'Female'), ]
要为女性创建数据框,您只需要执行以下操作:
df.female <- df[df$Gender == 'Female', ]
您可以使用以下方法将它们组合:
df.all <- rbind(df.male, df.female)
请注意,我假设您的Date
列实际上已经是Date类的,而不是其他诸如因子或字符之类的东西。 如果不是日期,则必须先将其转换以按日期排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.