为了更改结果数据框中的值,我使用stringr
基于 - 的函数,在 Hadley Wickham 的回答中推荐(https://stackoverflow.com/a/12829731/2872891)。df
除了最后更改为我更喜欢的之外,我保留了该功能return (df)
。但是,我看到一些奇怪的行为,我不确定是什么原因。的后续调用replace_all
,特别是调用 #3 和 #4 不会恢复原始数据:http:
和mailto:
. 下面是一个可重现的例子。
数据(只有一条数据记录):
请在 GitHub 上查看此要点:https ://gist.github.com/abnova/1709b1e0cf8a57570bd1#file-gistfile1-r
代码(为简洁起见,我删除了带有详细解释的评论):
DATA_SEP <- ":"
rx <- "([[:alpha:]][^.:]|[[:blank:]])::([[:alpha:]][^:]|[[:blank:]])"
results <- gsub(rx, "\\1@@\\2", results)
results <- gsub(": ", "!@#", results) # should be after the ::-gsub
results <- gsub("http://", "http//", results)
results <- gsub("mailto:", "mailto@", results)
results <- gsub("-\\r\\n", "-", results) # order is important here
results <- gsub("\\r\\n", " ", results)
results <- gsub("\\n:gpl:962356288", ":gpl:962356288", results)
results <- readLines(textConnection(unlist(results)))
numLines <- length(results)
results <- lapply(results, function(x) gsub(".$", "", x))
data <- read.table(textConnection(unlist(results)),
header = FALSE, fill = TRUE,
sep = DATA_SEP, quote = "",
colClasses = "character", row.names = NULL,
nrows = numLines, comment.char = "",
strip.white = TRUE)
replace_all(data, fixed("!@#"), ": ")
replace_all(data, fixed("@@"), "::")
replace_all(data, fixed("http//"), "http://")
replace_all(data, fixed("mailto@"), "mailto:")
结果 - 实际:
> data$V3
[1] "http//www.accessgrid.org/"
> data$V17
[1] "http//mailto@accessgrid-tech@lists.sourceforge.net"
结果 - 预期:
> data$V3
[1] "http://www.accessgrid.org/"
> data$V17
[1] "http://mailto:accessgrid-tech@lists.sourceforge.net"
我将不胜感激任何帮助和/或建议。