我有一个包含文本字符串的对象:
x <- "xxyyxyxy"
Run Code Online (Sandbox Code Playgroud)
我想把它拆分成一个向量,每个元素包含两个字母:
[1] "xx" "yy" "xy" "xy"
Run Code Online (Sandbox Code Playgroud)
看起来strsplit应该是我的票,但由于我没有正则表达式foo,我无法弄清楚如何使这个功能将字符串按照我想要的方式切成块.我该怎么做?
我使用大量固定宽度的文件(即没有分隔字符),我需要读入R.所以,通常有一个列宽度的定义来将字符串解析为变量.我可以read.fwf用来读取数据没有问题.但是,对于大文件,这可能需要很长时间.对于最近的数据集,这需要800秒来读取具有~500,000行和143个变量的数据集.
seer9 <- read.fwf("~/data/rawdata.txt",
widths = cols,
header = FALSE,
buffersize = 250000,
colClasses = "character",
stringsAsFactors = FALSE))
Run Code Online (Sandbox Code Playgroud)
fread在data.tableR 中的包中解决大多数数据读取问题非常棒,除了它不解析固定宽度的文件.但是,我可以将每一行读作单个字符串(~500,000行,1列).这需要3-5秒.(我喜欢data.table.)
seer9 <- fread("~/data/rawdata.txt", colClasses = "character",
sep = "\n", header = FALSE, verbose = TRUE)
Run Code Online (Sandbox Code Playgroud)
关于如何解析文本文件,有很多关于SO的好帖子.见JHoward的建议在这里,创建起始和终止列的矩阵,并substr分析数据.请参阅此处使用的GSee建议strsplit.我无法弄清楚如何使用这些数据.(另外,迈克尔史密斯对data.table邮件列表提出了一些建议,这些建议sed超出了我的实施能力.)现在,使用fread和substr()我可以在大约25-30秒内完成整个事情.请注意,在结束时强制转换为data.table需要一段时间(5秒?).
end_col <- cumsum(cols)
start_col <- end_col - cols + 1
start_end <- cbind(start_col, end_col) # matrix of start …Run Code Online (Sandbox Code Playgroud) 我正在使用 readBin 函数将文件保存为 MySQL BLOB,如本文所述(http://www.r-bloggers.com/save-r-plot-as-a-blob/)
plot_binary <- paste(readBin("temp.png", what="raw", n=1e6), collapse="")
Run Code Online (Sandbox Code Playgroud)
我的问题是:一旦这是在数据库中,我如何将其转储回文件?
> f = file ( "backIntoFile.png", "wb")
> writeBin(object = plot_binary, con = f )
> close(f)
Run Code Online (Sandbox Code Playgroud)
这不起作用;该文件似乎不是有效的 png ;
干杯!
我想定期拆分一个字符串.我的问题几乎与这个问题相同:如何将字符串拆分为给定长度的子字符串?除了我在数据集中有一列字符串而不是一个字符串.
这是一个示例数据集:
df = read.table(text = "
my.id X1
010101 1
010102 1
010103 1
010104 1
020101 1
020112 1
021701 0
021802 0
133301 0
133302 0
241114 0
241215 0
", header = TRUE, colClasses=c('character', 'numeric'), stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)
这是期望的结果.我更愿意删除前导零,如图所示:
desired.result = read.table(text = "
A1 A2 A3 X1
1 1 1 1
1 1 2 1
1 1 3 1
1 1 4 1
2 1 1 1
2 1 12 1
2 17 …Run Code Online (Sandbox Code Playgroud)