按日期排序数据框列表
sorting list of dataframes by date
我有一个数据帧列表,其结构类似于:
`ID1_01/05/10` <- data.frame(c(1,1))
`ID1_21/02/10` <- data.frame(c(2,1))
`ID2_01/05/10` <- data.frame(c(3,1))
`ID2_21/02/10` <- data.frame(c(4,1))
lst <- list(mget ( ls ( pattern = 'ID\d+')))
我想在列表中先按身份排序,然后再按日期排序。即:
`ID1_21/02/10`
`ID1_01/05/10`
`ID2_21/02/10`
`ID2_01/05/10`
有没有办法轻松做到这一点?
我们提取names
,得到数字部分('v1')和Date
部分,并在此基础上order
nm1 <- sapply(lst, names)[,1]
v1 <- as.numeric(sub(".*(\d+)_.*", "\1", nm1))
d1 <- as.Date(sub(".*_", "", nm1), "%d/%m/%y")
nm1[order(v1, d1)]
#[1] "ID1_21/02/10" "ID1_01/05/10" "ID2_21/02/10" "ID2_01/05/10"
lapply(lst, function(x) x[order(v1, d1)])
#[[1]]
#[[1]]$`ID1_21/02/10`
# c.2..1.
#1 2
#2 1
#[[1]]$`ID1_01/05/10`
# c.1..1.
#1 1
#2 1
#[[1]]$`ID2_21/02/10`
# c.4..1.
#1 4
#2 1
#[[1]]$`ID2_01/05/10`
# c.3..1.
#1 3
#2 1
更新
在 OP 的示例中,mget
被 list
包裹,它会创建一个 list
的 lists
。相反,它将是
lst <- mget ( ls ( pattern = 'ID\d+'))
如果是这样,那么
nm1 <- names(lst)
lst[order(v1, d1)]
我有一个数据帧列表,其结构类似于:
`ID1_01/05/10` <- data.frame(c(1,1))
`ID1_21/02/10` <- data.frame(c(2,1))
`ID2_01/05/10` <- data.frame(c(3,1))
`ID2_21/02/10` <- data.frame(c(4,1))
lst <- list(mget ( ls ( pattern = 'ID\d+')))
我想在列表中先按身份排序,然后再按日期排序。即:
`ID1_21/02/10`
`ID1_01/05/10`
`ID2_21/02/10`
`ID2_01/05/10`
有没有办法轻松做到这一点?
我们提取names
,得到数字部分('v1')和Date
部分,并在此基础上order
nm1 <- sapply(lst, names)[,1]
v1 <- as.numeric(sub(".*(\d+)_.*", "\1", nm1))
d1 <- as.Date(sub(".*_", "", nm1), "%d/%m/%y")
nm1[order(v1, d1)]
#[1] "ID1_21/02/10" "ID1_01/05/10" "ID2_21/02/10" "ID2_01/05/10"
lapply(lst, function(x) x[order(v1, d1)])
#[[1]]
#[[1]]$`ID1_21/02/10`
# c.2..1.
#1 2
#2 1
#[[1]]$`ID1_01/05/10`
# c.1..1.
#1 1
#2 1
#[[1]]$`ID2_21/02/10`
# c.4..1.
#1 4
#2 1
#[[1]]$`ID2_01/05/10`
# c.3..1.
#1 3
#2 1
更新
在 OP 的示例中,mget
被 list
包裹,它会创建一个 list
的 lists
。相反,它将是
lst <- mget ( ls ( pattern = 'ID\d+'))
如果是这样,那么
nm1 <- names(lst)
lst[order(v1, d1)]