0

我正在尝试qdap::multigsub解决气候事件类型列表中的一些拼写错误、拼写错误的名称、变体表达式和其他一些“异常”(是的,这是 NOAA 的风暴数据集,属于课程中的一项作业关于可重复研究的课程;尽管在作业中既不需要也不需要这种修复:这是我尽我所能!)。

所以我有名为“山洪”、“山洪”、“山洪”之类的事件,我想将它们全部归为一个名为“山洪”的关卡。所以我首先做的是:

expr <- c("^flash.*floo.*","thun.*")
repl <- c("flash flood","thunderstorm")

每个向量的长度是 51,这是一个knitr赋值,所以为了保持它的可读性(边距列 = 80),我不得不使用类似的东西

expr <- c(expr,"new_expr_1","new_expr_2")
repl <- c(repl,"new_repl_1","new_repl_2") # repeated many, many times

这使得代码有点混乱。当然,我有完整的exprrepl向量,所以我希望将每一对(expr 和 repl)对应的值排成一行,这样代码的读者就会很轻松(这就是为什么dput不能在这里工作的原因:他们不对齐每对值)。

我试过这个:

a <- data.frame(expr=expr,repl=repl)
print(a,rownames=FALSE)
  # copying the output, and then
b <- read.table(header=TRUE,text="paste_text_here")

但它失败了(我认为是因为print抛出不带引号的输出并且有一些两个词的 expr 或 repl)。我也试过

write.table(a,rownames=FALSE)
  # copying the output, and then
b <- read.table(header=TRUE,text="paste_text_here")

但它也不起作用(我认为因为write.table在引号之间输出每个项目,并且read.table发现太多引号无法处理)。

我想在我的 Rmarkdown 文件中有这样的内容:

exprRepl <- read.table(header=TRUE,text="expr repl
                                         expr_1 repl_1
                                         expr_2 repl_2")

我如何从我现在拥有的数据中实现这一目标?

dput数据框的前 5 行如下:

> dput(a[1:5,])
structure(list(expr = structure(c(5L, 1L, 2L, 3L, 4L), .Label = c("^BLIZZARD.*", 
"^FLASH.*FLOOD.*", "^HAIL.*", "^HEAVY.*RAIN.*", "^HURRICANE.*"
), class = "factor"), repl = structure(c(5L, 1L, 2L, 3L, 4L), .Label = c("BLIZZARD", 
"FLASH FLOOD", "HAIL", "HEAVY RAIN", "HURRICANE"), class = "factor")), .Names = c("expr", 
"repl"), row.names = c(NA, 5L), class = "data.frame")

如果有任何其他方法可以替换错误/变体名称,我很高兴收到并试一试!

4

1 回答 1

2

一种解决方案是在粘贴的文本周围使用单引号'(只要'您的数据中没有此方法就可以使用):

d <- structure(list(expr = structure(c(5L, 1L, 2L, 3L, 4L), .Label = c("^BLIZZARD.*", 
"^FLASH.*FLOOD.*", "^HAIL.*", "^HEAVY.*RAIN.*", "^HURRICANE.*"
), class = "factor"), repl = structure(c(5L, 1L, 2L, 3L, 4L), .Label = c("BLIZZARD", 
"FLASH FLOOD", "HAIL", "HEAVY RAIN", "HURRICANE"), class = "factor")), .Names = c("expr", 
"repl"), row.names = c(NA, 5L), class = "data.frame")

write.table(d, row.names=FALSE)

# copy paste output of write.table in text field below:
read.table(header = TRUE, text='"expr" "repl"
"^HURRICANE.*" "HURRICANE"
"^BLIZZARD.*" "BLIZZARD"
"^FLASH.*FLOOD.*" "FLASH FLOOD"
"^HAIL.*" "HAIL"
"^HEAVY.*RAIN.*" "HEAVY RAIN"')
于 2015-11-17T09:24:42.817 回答