相关疑难解决方法(0)

将字符串切割成固定宽度字符元素的向量

我有一个包含文本字符串的对象:

x <- "xxyyxyxy"
Run Code Online (Sandbox Code Playgroud)

我想把它拆分成一个向量,每个元素包含两个字母:

[1] "xx" "yy" "xy" "xy"
Run Code Online (Sandbox Code Playgroud)

看起来strsplit应该是我的票,但由于我没有正则表达式foo,我无法弄清楚如何使这个功能将字符串按照我想要的方式切成块.我该怎么做?

r strsplit

53
推荐指数
7
解决办法
6万
查看次数

更快地读取固定宽度文件的方法

我使用大量固定宽度的文件(即没有分隔字符),我需要读入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)

freaddata.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超出了我的实施能力.)现在,使用freadsubstr()我可以在大约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)

substring r apply lapply data.table

41
推荐指数
2
解决办法
1万
查看次数

R : readBin 和 writeBin(用于存储/检索 MySQL BLOB 或 LONGBLOB)

我正在使用 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 ;

干杯!

binary blob r

6
推荐指数
1
解决办法
4286
查看次数

定期拆分字符串

我想定期拆分一个字符串.我的问题几乎与这个问题相同:如何将字符串拆分为给定长度的子字符串?除了我在数据集中有一列字符串而不是一个字符串.

这是一个示例数据集:

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)

string r

5
推荐指数
1
解决办法
719
查看次数

标签 统计

r ×4

apply ×1

binary ×1

blob ×1

data.table ×1

lapply ×1

string ×1

strsplit ×1

substring ×1