【发布时间】:2016-08-05 20:41:22
【问题描述】:
我有以下时间段的排序列表 (lst),我想将时间段拆分为特定日期,然后在不改变列表顺序的情况下提取最大时间段。
$`1`
[1] "01.12.2015 - 21.12.2015"
$`2`
[1] "22.12.2015 - 05.01.2016"
$`3`
[1] "14.09.2015 - 12.10.2015" "29.09.2015 - 26.10.2015"
因此,调整后的列表应该是这样的:
$`1`
[1] "01.12.2015" "21.12.2015"
$`2`
[1] "22.12.2015" "05.01.2016"
$`3`
[1] "14.09.2015" "12.10.2015" "29.09.2015" "26.10.2015"
为了做到这一点,我开始拆分列表:
lst_split <- str_split(lst, pattern = " - ")
导致以下结果:
[[1]]
[1] "01.12.2015" "21.12.2015"
[[2]]
[1] "22.12.2015" "05.01.2016"
[[3]]
[1] "c(\"14.09.2015" "12.10.2015\", \"29.09.2015" "26.10.2015\")"
然后,我尝试提取模式:
lapply(lst_split, function(x) str_extract(pattern = c("\\d+\\.\\d+\\.\\d+"),x))
但我的输出缺少一个日期 (29.09.2015)
[[1]]
[1] "01.12.2015" "21.12.2015"
[[2]]
[1] "22.12.2015" "05.01.2016"
[[3]]
[1] "14.09.2015" "12.10.2015" "26.10.2015"
有没有人知道我该如何让它发挥作用并提出更有效的解决方案?提前谢谢你。
【问题讨论】:
-
您错过的日期是由于
str_extract- 使用str_extract_all -
不确定为什么需要`str_extract,因为你需要获得最大日期。
-
@WiktorStribiżew,谢谢它的工作,但导致多级列表不太容易操作,我想避免它。
-
@WiktorStribiżew 和 @akun 谢谢!现在我明白了,通过结合你的 cmets 就足以使用
str_extract_all(lst, "\\d+\\.\\d+\\.\\d+")并忽略我的下一步与str_extract。 -
甚至
> lst_split <- str_split(lst, pattern = " - ") > l <- str_extract_all(lst_split, "\\d+\\.\\d+\\.\\d+") > j <- sapply(l,paste,collapse=";") > k = str_extract_all(j, "[^;]+;[^;]+") > unlist(k)