我有一个数据帧,其中有两列的名称为
df1 <- structure(list(Col1 = c("Luis", "Pedro", "John", "Ingrid"),
Col2 = c("Raul", "Maria", "Chris", "Lia")),
class = "data.frame", row.names = c(NA, -4L))
我还有一个,每个名字对应的日期:
df2 <- structure(list(Name = c("Luis", "Pedro", "John", "Ingrid","Raul", "Maria", "Chris", "Lia"),
Date = c("10/05/22","04/05/22", "03/05/22", "07/05/22","01/05/22","06/05/22", "05/05/22","02/05/22")),
class = "data.frame", row.names = c(NA, -8L))
它看起来像这样:
df1:
Col1 Col2
1 Luis Raul
2 Pedro Maria
3 John Chris
4 Ingrid Lia
df2:
Name Date
1 Luis 10/05/22
2 Pedro 04/05/22
3 John 03/05/22
4 Ingrid 07/05/22
5 Raul 01/05/22
6 Maria 06/05/22
7 Chris 05/05/22
8 Lia 02/05/22
我想要的是,在每一行中,第一列中出现日期第一的名称,第二列中显示日期较晚的名称,我给出了一个我期望的结果示例:
Col1 Col2
1 Raul Luis
2 Pedro Maria
3 John Chris
4 Lia Ingrid
我们将"Date"转换为Date
类并执行order
ing
df2$Date <- as.Date(df2$Date, "%d/%m/%y")
df2new <- df2[order(df2$Date),]
df1[] <- t(apply(df1, 1, function(x) x[order(match(x, df2new$Name))]))
-输出
> df1
Col1 Col2
1 Raul Luis
2 Pedro Maria
3 John Chris
4 Lia Ingrid