这比任何事情都更方便。我经常手动添加引号和逗号来为其他函数创建 ac() 列表。是否有一种快速而聪明的方法来添加它们而不涉及棘手的查找/替换或多次操作?如果我有多个由空格或制表符分隔的项目,或者每行一个项目,我想执行以下操作:
A B C D
或者
一种
乙
C
D
到:
temp <- c("A", "B", "C", "D")
Run Code Online (Sandbox Code Playgroud)
我可以手动添加它们,将空格查找/替换为“,”,然后添加第一个/最后一个,但这很烦人。有没有更快的方法?
该scan函数是所有函数的基础read.*,但它也用于执行您希望执行的任务。几年前text添加了一个参数,因此您不再需要textConnection环绕“裸字符串”。可以与任何分隔符一起使用,默认的空白分隔符将处理 yopu 要求处理的内容:
TEMP <- scan(text="A B C D", what="")
#-------------------
Read 4 items
> TEMP
[1] "A" "B" "C" "D"
> dput(TEMP)
c("A", "B", "C", "D")
Run Code Online (Sandbox Code Playgroud)
如果您需要在可能是数字的内容上保留前导零,那么您将需要将它们作为文本导入或在打印时添加前导零formatC或sprintf
以下是基本 R 字符串函数和其他函数的选项stringr。在这两种情况下,想法都是在每个空格处拆分文本,然后用单引号 ( ')替换单词边界。这样做的原因是为了区别于"字符串开始和结束的双引号 ( ),即在字符串中包含引号。您应该可以通过转义双引号 ( \\")来做同样的事情,但是我发现在尝试执行此操作时很少将它们正确匹配,因此我没有对其进行测试。然后用逗号(也可以是逗号后跟空格)将该字符串向量折叠在一起。
具有基本功能:
library(dplyr)
library(stringr)
txt <- "A B C D"
split_txt <- strsplit(txt, split = "\\s")[[1]]
quoted <- gsub("\\b", "'", split_txt)
paste(quoted, collapse = ",")
#> [1] "'A','B','C','D'"
Run Code Online (Sandbox Code Playgroud)
或者 tidyverse 的:
txt %>%
str_split("\\s") %>%
`[[`(1) %>%
str_replace_all("\\b", "'") %>%
str_flatten(collapse = ",")
#> [1] "'A','B','C','D'"
Run Code Online (Sandbox Code Playgroud)