标签: strsplit

当可能的输出已知时加速`strsplit`

我有一个带有因子列的大型数据框,我需要通过用分隔符分割因子名称来划分为三个因子列.这是我目前的方法,这是一个非常慢的大数据框架(有时数百万行):

data <- readRDS("data.rds")
data.df <- reshape2:::melt.array(data)
head(data.df)
##  Time Location    Class Replicate Population
##1    1        1 LIDE.1.S         1 0.03859605
##2    2        1 LIDE.1.S         1 0.03852957
##3    3        1 LIDE.1.S         1 0.03846853
##4    4        1 LIDE.1.S         1 0.03841260
##5    5        1 LIDE.1.S         1 0.03836147
##6    6        1 LIDE.1.S         1 0.03831485

Rprof("str.out")
cl <- which(names(data.df)=="Class")
Classes <- do.call(rbind, strsplit(as.character(data.df$Class), "\\."))
colnames(Classes) <- c("Species", "SizeClass", "Infected")
data.df <- cbind(data.df[,1:(cl-1)],Classes,data.df[(cl+1):(ncol(data.df))])
Rprof(NULL)

head(data.df)
##  Time Location Species SizeClass Infected Replicate Population
##1    1        1 …
Run Code Online (Sandbox Code Playgroud)

performance r strsplit stringr reshape2

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

替换计算结果

我正在调整数据,具体来说,我打开了这个pdf http://pubs.acs.org/doi/suppl/10.1021/ja105035r/suppl_file/ja105035r_si_001.pdf并从表s4中删除了数据,

    1a 1b 1a 1b
1 5.27 4.76 5.09 4.75
2 2.47 2.74 2.77 2.80
4 1.14 1.38 1.12 1.02
6 7.43 7.35 7.22-7.35a 7.25-7.36a
7 7.38 7.34 7.22-7.35a 7.25-7.36a
8 7.23 7.20 7.22-7.35a 7.25-7.36a
9(R) 4.16 3.89 4.12b 4.18b
9(S) 4.16 3.92 4.12b 4.18b
10 1.19 0.91 1.21 1.25
Run Code Online (Sandbox Code Playgroud)

将其粘贴到记事本中并将其保存为txt文件.

s4 <- read.table("s4.txt", header=TRUE, stringsAsFactors=FALSE)
Run Code Online (Sandbox Code Playgroud)

给,

   X1a  X1b      X1a.1      X1b.1
1 5.27 4.76       5.09       4.75
2 2.47 2.74       2.77       2.80
4 1.14 1.38       1.12       1.02
6 7.43 …
Run Code Online (Sandbox Code Playgroud)

r mean gsub strsplit

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

在R strsplit中使用正则表达式

我想将"2015-05-13T20:41:29 + 0000"分成2015-05和20:41:29 + 0000.我尝试了以下方法:

> strsplit("2015-05-13T20:41:29+0000",split="-\\d\\dT",fixed=TRUE)
[[1]]
[1] "2015-05-13T20:41:29+0000"
Run Code Online (Sandbox Code Playgroud)

但模式不匹配.如何解决这个问题?

regex r strsplit

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

R:反斜杠上的strsplit(\)

我试图在第一个反斜杠之前提取字符串的一部分,但我似乎无法让它正常工作.

我已经尝试了多种方法让它工作,基于strsplit的手册页和在线搜索.

在我的实际情况中,字符串位于我从数据库连接获得的数据帧中,但我可以使用以下内容简化情况:

> strsplit("BLAAT1\022E:\\BLAAT2\\BLAAT3","\\",fixed=TRUE)
[[1]]
[1] "BLAAT1\022E:" "BLAAT2"      "BLAAT3"  

> strsplit("BLAAT1\022E:\\BLAAT2\\BLAAT3","\\",fixed=FALSE)
Error in strsplit("BLAAT1\022E:\\BLAAT2\\BLAAT3", "\\", fixed = FALSE) : 
  invalid regular expression '\', reason 'Trailing backslash'

> strsplit("BLAAT1\022E:\\BLAAT2\\BLAAT3","\\\\",fixed=TRUE)
[[1]]
[1] "BLAAT1\022E:\\BLAAT2\\BLAAT3"

> strsplit("BLAAT1\022E:\\BLAAT2\\BLAAT3","\\\\",fixed=FALSE)
[[1]]
[1] "BLAAT1\022E:" "BLAAT2"       "BLAAT3"      

预期的输出也会在BLAAT1和022E之间的\上分开:

提前致谢

regex r strsplit

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

计算字符串一部分的字符数

我有这个df:

dput(df)
structure(list(URLs = c("http://bursesvp.ro//portal/user/_/Banco_Votorantim_Cartoes/0-7f2f5cb67f1-22918b.html", 
"http://46.165.216.78/.CartoesVotorantim/Usuarios/Cadastro/BV6102891782/", 
"http://www.chalcedonyhotel.com/images/promoc/premiado.tam.fidelidade/", 
"http://bmbt.ro/portal/a3/_Votorantim_/VotorantimCartoes2016/0-7f2f5cb67f1-22928b.html", 
"http://voeazul.nl/azul/")), .Names = "URLs", row.names = c(NA, 
-5L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

它描述了不同的URL,我试图计算主机名的字符数,无论是实际名称(http://hostname.com/...)还是IP(http://000.000.000.000)/..).但是,如果它是一个实际名称,那么我只想要www之间的nchar.和.com.如果它是IP,那么它的所有数字和"中间"点.

上述样本数据的预期结果:

exp_outcome
1           8
2          13
3          15
4           4
5           7
Run Code Online (Sandbox Code Playgroud)

我试图做一些strsplit但无法到达的地方.

r strsplit

6
推荐指数
2
解决办法
222
查看次数

R:使用strsplit()在两个字符之间拆分字符串

假设我有以下字符串:

s <- "ID=MIMAT0027618;Alias=MIMAT0027618;Name=hsa-miR-6859-5p;Derives_from=MI0022705"
Run Code Online (Sandbox Code Playgroud)

我想恢复之间的字符串";""="获得以下输出:

[1] "MIMAT0027618"  "MIMAT0027618"  "hsa-miR-6859-5p"  "MI0022705"
Run Code Online (Sandbox Code Playgroud)

我可以使用strsplit()多个拆分元素吗?

split r strsplit

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

R:如何仅在第二个空格之后分隔值

我有一个具有不同名称的列:

X <- c("Ashley, Tremond WILLIAMS, Carla", "Claire, Daron", "Luw, Douglas CANSLER, Stephan")
Run Code Online (Sandbox Code Playgroud)

在第二个空格之后,它开始第二个人的名字。例如,Ashley、Tremond 是一个人,WILLIAMS、Carla 是另一个人。

我努力了:

strsplit(X, "\\,\\s|\\,|\\s")
Run Code Online (Sandbox Code Playgroud)

但它除以所有空格,所以我得到:

strsplit(X, "\\,\\s|\\,|\\s")
[[1]]
[1] "Ashley"   "Tremond"  "WILLIAMS" "Carla"   

[[2]]
[1] "Claire" "Daron" 

[[3]]
[1] "Luw"     "Douglas" "CANSLER" "Stephan"
Run Code Online (Sandbox Code Playgroud)

我怎样才能只在第一个空格之后分开,这样我就明白了?:

[1] "Ashley, Tremond"  "WILLIAMS, Carla"   

[[2]]
[1] "Claire, Daron" 

[[3]]
[1] "Luw, Douglas" "CANSLER, Stephan"
Run Code Online (Sandbox Code Playgroud)

预先感谢您的所有帮助

r separator strsplit

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

使用带有多个分隔符的 strsplit

我该如何拆分这个

 Chr3:153922357-153944632(-)
 Chr11:70010183-70015411(-)   
Run Code Online (Sandbox Code Playgroud)

进入

    Chr3  153922357 153944632 - 
    Chr11 70010183  70015411  -   
Run Code Online (Sandbox Code Playgroud)

我试过了strsplit(df$V1,"[[:punct:]]")),但最终结果中没有出现负号

regex r strsplit

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

使用正则表达式拆分R

我想使用R拆分一些聊天消息,这是一个示例:

example <- "[29.01.18, 23:33] Alice: Ist das hier ein Chatverlauf?\n[29.01.18, 23:45] Bob: Ja ist es!\n[29.01.18, 23:45] Bob: Der ist dazu da die funktionsweise des Parsers zu demonstrieren\n[29.01.18, 23:46] Alice: ?PTT-20180129-WA0025.opus (Datei angehängt)\n[29.01.18, 23:46] Bob: Ah, er kann also auch erkennen ob Voicemails gesendet wurden!\n[29.01.18, 23:46] Bob: Das ist praktisch!\n[29.01.18, 23:47] Bob: Oder?\n[29.01.18, 23:47] Alice: ja |Emoji_Grinning_Face_With_Smiling_Eyes| \n[29.01.18, 23:47] Alice: und Emojis gehen auch!\n[29.01.18, 23:47] Bob: Was ist mit normalen Smilies?\n[29.01.18, 23:49] Alice: ?Keine Ahnung, lass uns das doch mal …
Run Code Online (Sandbox Code Playgroud)

regex r strsplit

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

分割字符串而不考虑特殊字符

我需要一种方法来每 n 个字母分割一个字符串。

例如令s="QW%ERT%ZU%I%O%P"n=3,我想获得"QW%E" "RT%Z" "U%I%O" "%P"

如您所见,除法中不考虑特殊字符“%”。

我尝试过

strsplit(s, "(?<=.{10})(?=.*\\%)", perl = TRUE)[[1]]
Run Code Online (Sandbox Code Playgroud)

但我找不到办法获得我想要的东西。

regex string r strsplit

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

标签 统计

r ×10

strsplit ×10

regex ×5

gsub ×1

mean ×1

performance ×1

reshape2 ×1

separator ×1

split ×1

string ×1

stringr ×1