我想要2列具有列info1的第一个字符串和列信息2的最后一个字符串。
这是我的数据视图:
id info1 info2
1 2012/11/03 22:09:00 2012/11/03 22:03:00, 2012/12/11 22:09:02
2 2012/12/13 22:15:00 2013/6/24 23:30:00
3 2013/8/25 00:38:00, 2013/5/07 01:55:00 2017/4/10 02:08:00, 2012/11/6 00:15:00
我想要:
id info3 info4
1 2012/11/03 22:09:00 2012/12/11 22:09:02
2 2012/12/13 22:15:00 2013/6/24 23:30:00
3 2013/8/25 00:38:00 2012/11/6 00:15:00
有人可以帮忙吗?
谢谢!
答案 0 :(得分:1)
这是Tidyverse的一种方法:
我们可以使用正则表达式从info1
中提取非逗号字符,后跟逗号,从info2
中提取逗号,后跟空格。
library(dplyr)
library(stringr)
data %>%
mutate(info3 = str_extract(info1,"^[^,]+(?=,)"),
info4 = str_extract(info2,"(?<=, )[^,]+$"))
id info1 info2 info3 info4
1 1 2015/10/22 00:28:00, 2015/10/23 00:09:00 2015/10/22 07:20:00, 2015/10/23 08:18:00 2015/10/22 00:28:00 2015/10/23 08:18:00
2 2 2015/10/22 00:28:00, 2015/10/24 00:01:00, 2015/10/23 00:09:00 2015/10/22 07:20:00, 2015/10/23 08:18:00 2015/10/22 00:28:00 2015/10/23 08:18:00
样本数据
data <- structure(list(id = 1L, info1 = "2015/10/22 00:28:00, 2015/10/23 00:09:00",
info2 = "2015/10/22 07:20:00, 2015/10/23 08:18:00"), class = "data.frame", row.names = c(NA, -1L))
答案 1 :(得分:0)
我们可以使用stri_extract_first_regex
中的stri_extract_last_regex
和stringi
。
library(stringi)
library(dplyr)
df3 %>%
mutate(info3 = stri_extract_first_regex(info1, '\\d+/\\d+/\\d+ \\d+:\\d+:\\d+'),
info4 = stri_extract_last_regex(info2, '\\d+/\\d+/\\d+ \\d+:\\d+:\\d+')) %>%
select(-info1, -info2)
# ID info3 info4
#1 1 2015/10/22 00:28:00 2015/10/23 08:18:00
#2 2 2016/5/30 22:10:00 2016/6/02 05:45:00
#3 3 <NA> <NA>
#4 4 2016/9/19 00:10:00 2016/9/20 08:29:30
#5 5 <NA> <NA>