我有一个变量,通常具有一些乱码,例如:
\n\t\n\t\n\t\n\t\tSeuat eselyt\n\t\t\t\t\t\n\t\t\tti 30.07.2019 klo 12:00 - 14:30\n\t\t\t\t\t\t\tTau ski 2342342 2342342\n\t\t\t\t\t\n\t\n
我正在尝试提取日期(30.07.2019)和时间(12:00-14:30)。我对解析不是很好,因此希望在R中实现此功能有帮助。
答案 0 :(得分:2)
如果您可以依靠日期和时间部分仅在数据中出现一次的事实,则可以使用正则表达式提取它们(此处使用数据框):
library(tidyverse)
data <-
tibble(gibberish_string = "\n\t\n\t\n\t\n\t\tSeuat eselyt\n\t\t\t\t\t\n\t\t\tti 30.07.2019 klo 12:00 - 14:30\n\t\t\t\t\t\t\tTau ski 2342342 2342342\n\t\t\t\t\t\n\t\n")
data %>% mutate(date = str_extract(gibberish_string,
pattern = "\\d{1,2}\\.\\d{1,2}\\.\\d{4}"),
time = str_extract(gibberish_string,
pattern = "\\d{1,2}:\\d{1,2}"))
答案 1 :(得分:1)
将字符串拆分,然后提取日期和时间:
x <- "\n\t\n\t\n\t\n\t\tSeuat eselyt\n\t\t\t\t\t\n\t\t\tti 30.07.2019 klo 12:00 - 14:30\n\t\t\t\t\t\t\tTau ski 2342342 2342342\n\t\t\t\t\t\n\t\n"
lapply(strsplit(x, "[\n\t ]"), function(i){
dd <- i[ grepl("[0-9]{2}.[0-9]{2}.[0-9]{2}", i) ]
tt <- i[ grepl("[0-9]{2}:[0-9]{2}", i) ]
c(dd, paste(tt, collapse = "-"))
})
# [[1]]
# [1] "30.07.2019" "12:00-14:30"
答案 2 :(得分:1)
此日期:
(\d{1,2}[\.\/]){2}((\d{4})|(\d{2}))
这是时间:
\d{1,2}:\d{2}\s?-\s?\d{1,2}:\d{2}
答案 3 :(得分:1)
一种漫长的循序渐进的base
/ stringr
方法:
tst<-"\n\t\n\t\n\t\n\t\tSeuat eselyt\n\t\t\t\t\t\n\t\t\tti 30.07.2019 klo 12:00 - 14:30\n\t\t\t\t\t\t\tTau ski 2342342 2342342\n\t\t\t\t\t\n\t\n"
cleaner<-gsub("\\n|\\t","",tst)
split_txt<-strsplit(cleaner, "\\s(?=[a-z])",perl=T)
dates<-stringr::str_extract_all(unlist(split_txt),
"\\d{1,}\\.\\d{2,}\\.\\d{4}")
times<-stringr::str_extract_all(stringr::str_remove_all(unlist(split_txt),
"[A-Za-z]"),".*\\-.*")
dates[lengths(dates)>0]
[[1]]
[1] "30.07.2019"
trimws(times[lengths(times)>0])
[1] "12:00 - 14:30"