【问题标题】:read.table from write.table in R从 R 中的 write.table 读取.table
【发布时间】:2015-11-17 04:30:57
【问题描述】:

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

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

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")

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

前5行数据框的dput如下:

> 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")

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

【问题讨论】:

    标签: r gsub read.table write.table qdap


    【解决方案1】:

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

    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"')
    

    【讨论】:

    • 非常简单的解决方案,谢谢!。只是为了完成,这是?Quotes(我什至没有想到咨询!):“单引号通常仅用于分隔包含双引号的字符常量。”。
    猜你喜欢
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多