У меня есть dataframe, который выглядит как:Совокупность R на основе нескольких столбцов, а затем слияние в dataframe?
id<-c(1,1,1,3,3)
date1<-c("23-01-08","01-11-07","30-11-07","17-12-07","12-12-08")
type<-c("A","B","A","B","B")
df<-data.frame(id,date,type)
df$date<-as.Date(as.character(df$date), format = "%d-%m-%y")
То, что я хочу, чтобы добавить новый столбец, который содержит самую раннюю дату для каждого идентификатора для каждого типа. Эта первая попытка работает нормально и выполняет агрегацию и объединение на основе только идентификатора.
d = aggregate(df$date, by=list(df$id), min)
df2 = merge(df, d, by.x="id", by.y="Group.1")
То, что я хочу, хотя это также фильтровать по типу и получить этот результат:
data.frame(df2, desired=c("2007-11-30","2007-11-01", "2007-11-30","2007-12-17","2007-12-17"))
Я пробовал много возможностей. Я действительно думаю, что это может быть сделано со списками, но я в убыток, как ...
d = aggregate(df$date, by=list(df$id, df$type), min)
# And merge the result of aggregate with the original data frame
df2 = merge(df,d,by.x=list("id","type"),by.y=list("Group.1","Group.2"))
Для этого простого примера я просто не мог отделить типы в их собственный Д.Ф., построить новый столбец, а затем объединить в результате 2 dfs, но на самом деле существует много типов и 3-й столбец, который также необходимо фильтровать аналогично, что было бы нецелесообразно ...
Спасибо!
У вас есть несоответствие между опечатка '' date1' и date' при создании 'df' – thelatemail
@thelatemail Вы правы. Я пошел по кругу, чтобы сделать эту колонку с датой ... – Soran