我有一个带有因子列的大型数据框,我需要通过用分隔符分割因子名称来划分为三个因子列.这是我目前的方法,这是一个非常慢的大数据框架(有时数百万行):
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) 我正在调整数据,具体来说,我打开了这个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) 我想将"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)
但模式不匹配.如何解决这个问题?
我试图在第一个反斜杠之前提取字符串的一部分,但我似乎无法让它正常工作.
我已经尝试了多种方法让它工作,基于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之间的\上分开:
提前致谢
我有这个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但无法到达的地方.
假设我有以下字符串:
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()多个拆分元素吗?
我有一个具有不同名称的列:
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)
预先感谢您的所有帮助
我该如何拆分这个
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:]]")),但最终结果中没有出现负号
我想使用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) 我需要一种方法来每 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)
但我找不到办法获得我想要的东西。