我有一个名为Test
Names Category Date
Ashley A 29/01
Ashley M 28/01
Ashley M 27/01
Bob A 16/01
Charles M 12/01
Mary A 25/01
Mary M 27/01
我希望按日期对数据进行排序,并通过删除重复项来仅选择数据框中的最新元素。
所以输出应该像
Name Cat Date
Ashley A 29/01
Bob A 16/01
Charles M 12/01
Mary M 27/01
答案 0 :(得分:2)
按照您给出的顺序,仅使用base:
isset()
假设您的数据是存储在"数据"下的data.frame。 然后输出是:
ordered <- data[order(data$Date,decreasing=TRUE),]
unique <- ordered[!duplicated(ordered$Names),]
答案 1 :(得分:1)
我们可以使用data.table
。将'data.frame'转换为'data.table'(setDT(Test)
),然后将order
转换为'Names'和'Date'(转换为Date
类后),并删除与!duplicated
library(data.table)
setDT(Test)[order(Names,-as.Date(paste0(Date, '/01'),
'%d/%m/%y'))][!duplicated(Names)]
# Names Category Date
#1: Ashley A 29/01
#2: Bob A 16/01
#3: Charles M 12/01
#4: Mary M 27/01
或unique
之后,by
选项order
和unique(setDT(Test)[order(Names,-as.Date(paste0(Date,
'/01'), '%d/%m/%y'))], by = 'Names')
选项
%d/%m
注意:目前尚不清楚“日期”格式是%d/%y
还是paste
。上面的代码%d/%m/%y
'01'并使用格式%d/%y/%m
(假设缺少'year')。如果缺少“月份”,请使用base R
作为格式)
如果我们需要使用 i1 <- with(Test, order(Names, -as.numeric(as.Date(paste0(Date,
'/01'), '%d/%m/%y'))))
Test[i1,][!duplicated(Test$Names),]
# Names Category Date
#1 Ashley A 29/01
#4 Bob A 16/01
#5 Charles M 12/01
#7 Mary M 27/01
,则等效方法是
Test <- structure(list(Names = c("Ashley", "Ashley", "Ashley", "Bob",
"Charles", "Mary", "Mary"), Category = c("A", "M", "M", "A",
"M", "A", "M"), Date = c("29/01", "28/01", "27/01", "16/01",
"12/01", "25/01", "27/01")), .Names = c("Names", "Category",
"Date"), class = "data.frame", row.names = c(NA, -7L))
注意:这与OP的帖子中显示的预期输出顺序相同。
var clientManager = new BasicRedisClientManager("127.0.0.1");
var client = clientManager.GetClient();
client.Db = 3; // set the DB to 3
var item = DateTime.Now.Ticks.ToString();
client.AddItemToList("test_q", item);