我知道在grep中你可以简单地使用ignore.case = TRUE. 但是, strsplit又如何呢?您可以传递正则表达式作为第二个参数,但我不确定如何使该正则表达式不区分大小写。
目前,这就是我的 strsplit 的样子,但我想让搜索不区分大小写。我该怎么做呢?
strsplit(df$sentence, paste0(" ", df$node, "( |[!\",.:;?})\\]])"))
Run Code Online (Sandbox Code Playgroud)
例子:
sentence <- "De A-bom, Sint...";
node <- "a-bom"
contexts <- strsplit(sentence, paste0("(?i) ", node, "( |[!\",.:;?})\\]])"))
(leftContext <- sapply(contexts, `[`, 1))
Run Code Online (Sandbox Code Playgroud)
预期收益:
[1] "De"
Run Code Online (Sandbox Code Playgroud)
实际回报:
[1] "De A-bom, Sint..."
Run Code Online (Sandbox Code Playgroud)
但请注意,正则表达式本身确实可以在线工作。
我有一个具有不同名称的列:
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)
预先感谢您的所有帮助
我想在每个大写字母之前使用strsplitat 模式并使用积极的前瞻。然而它每次都会分裂,我对此感到困惑。这个正则表达式与 不兼容吗?为什么会这样以及需要改变什么?strsplit
strsplit('AaaBbbCcc', '(?=\\p{Lu})', perl=TRUE)[[1]]
strsplit('AaaBbbCcc', '(?=[A-Z])', perl=TRUE)[[1]]
strsplit('AaaBbbCcc', '(?=[ABC])', perl=TRUE)[[1]]
# [1] "A" "aa" "B" "bb" "C" "cc"
Run Code Online (Sandbox Code Playgroud)
预期结果:
# [1] "Aaa" "Bbb" "Ccc"
Run Code Online (Sandbox Code Playgroud)
在演示中它实际上看起来不错。
理想情况下,它应该在每个骆驼案例之前分裂,例如Aa和不AA;有\\p{Lt},但这似乎根本不起作用。
strsplit('AaaABbbBCcc', '(?=\\p{Lt})', perl=TRUE)[[1]]
# [1] "AaaABbbBCcc"
Run Code Online (Sandbox Code Playgroud)
预期结果:
# [1] "AaaA" "BbbB" "Ccc"
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)
但我找不到办法获得我想要的东西。
我有一个名为LOAN的表,其中包含名为RATE的列,其中观察以百分比形式给出,例如14.49%我如何格式化表格以便编辑速率中的所有值并从条目中删除%以便我可以使用绘图函数我试过用strsplit.
strsplit(LOAN$RATE,"%")
Run Code Online (Sandbox Code Playgroud)
但得到错误非字符参数
我希望将字符串拆分为某个字符,同时将该字符保留在第二个结果字符串中.我可以实现几乎所有所需的操作,除了我丢失了我指定的字符strsplit,我猜这个字符称为分隔符.
有没有办法要求strsplit保留分隔符?或者我必须使用某种正则表达式吗?谢谢你的任何建议.这似乎是一个非常基本的问题.对不起,如果它是重复的.我更喜欢使用底座R.
这是一个显示我到目前为止的例子:
my.table <- read.table(text = '
model npar AICc
AA(~region+state+county+city)BB(~region+state+county+city)CC(~1) 17 11111.11
AA(~region+state+county)BB(~region+state+county)CC(~123) 14 22222.22
AA(~region+state)BB(~region+state)CC(~33) 13 33333.33
AA(~region)BB(~region)CC(~4321) 6 44444.44
', header = TRUE, stringsAsFactors = FALSE)
desired.result <- read.table(text = '
model CC npar AICc
AA(~region+state+county+city)BB(~region+state+county+city) CC(~1) 17 11111.11
AA(~region+state+county)BB(~region+state+county) CC(~123) 14 22222.22
AA(~region+state)BB(~region+state) CC(~33) 13 33333.33
AA(~region)BB(~region) CC(~4321) 6 44444.44
', header = TRUE, stringsAsFactors = FALSE)
split.model <- strsplit(my.table$model, 'CC\\(')
split.models <- matrix(unlist(split.model), ncol=2, byrow=TRUE, dimnames = list(NULL, c("model", "CC"))) …Run Code Online (Sandbox Code Playgroud) 我有一个这样的数据框(4行和5列):
Marker ind1 ind2 ind3 ind4
mark1 CT TT CT TT
mark2 AG AA AG AA
mark3 AC AA AC AA
mark4 CT TT CT TT
Run Code Online (Sandbox Code Playgroud)
我想要做的是将每个列(第一个coloumn除外)拆分为两列.所以输出应该像这样(4行9列):
Marker ind1 ind1 ind2 ind2 ind3 ind3 ind4 ind4
mark1 C T T T C T T T
mark2 A G A A A G A A
mark3 A C A A A C A A
mark4 C T T T C T T T
Run Code Online (Sandbox Code Playgroud)
我知道如何拆分一列
do.call(rbind,strsplit(test$JRP4RA6119.039, ""))
Run Code Online (Sandbox Code Playgroud)
这给了这个:
[,1] [,2]
[1,] "C" …Run Code Online (Sandbox Code Playgroud) 我有数年有关个人的数据,但是他们的姓名每年的格式不同。名称中的一半已经按“ First Last”顺序排列,但是我不知道如何成功编辑另一半(“ Last,First”)。
这是样本df:
name <- c("First1 Last1","Last2, First2", "Last3, First3", "First4 Last4", "First5 Last5")
salary <-c(51000, 72000,125000,67000,155000)
year <-c(2012,2014,2013,2013,2014)
df <- data.frame(name, salary, year, stringsAsFactors=FALSE)
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的方法:用逗号分隔文本:
df$name2 <- strsplit(df$name, ", ") #to split the character string by comma
df$name3 <-paste(df$name2, collapse=" ") #to collapse the newly created vectors back into a string
df$name4 <-paste(rev(df$name2)) #to try pasting each vector in reverse order
df$name5 <-paste(rev(df$name2)[2:1]) #trying again...
Run Code Online (Sandbox Code Playgroud)
我已经打印了正确的名称,但是倒退了,并且将它们打印在错误的行上,但是尽管进行了谷歌搜索,但我仍然无法正常工作。我究竟做错了什么?
我有一个数据框(让我们称之为df),如下所示:
col1 <- c("1/10", "2/30", "1/40", "3/23", "0/17", "7/14")
col2 <- c("2/44", "0/13", "4/55", "6/43", "0/19", "2/34")
col3 <- c("0/36", "0/87", "3/11", "2/12", "4/33", "0/12")
col4 <- c("1/76", "2/65", "2/21", "5/0", "2/26", "1/52")
df <- data.frame(col1,col2,col3,col4)
Run Code Online (Sandbox Code Playgroud)
目标:在每个单元格中有两个数字用"/"分隔.创建两个数据帧:1个具有LEFT编号的数据帧和另一个具有RIGHT编号的数据帧.
理想情况下,最终结果如下所示:
df.left.numbers:
col1 col2 col3 col4
1 2 0 1
2 0 0 2
1 4 3 2
3 6 2 5
0 0 4 2
7 2 0 1
Run Code Online (Sandbox Code Playgroud)
df.right.numbers:
col1 col2 col3 col4
10 44 36 76
30 13 87 …Run Code Online (Sandbox Code Playgroud) 我再次与strsplit斗争.我正在将一些字符串转换为数据帧,但是有一个正斜杠,/并且我的字符串中的一些空格会让我烦恼.我可以解决它,但我渴望了解我是否可以使用某些花哨或strsplit.我下面的工作示例应说明问题
我正在使用的strsplit函数
str_to_df <- function(string){
t(sapply(1:length(string), function(x) strsplit(string, "\\s+")[[x]])) }
Run Code Online (Sandbox Code Playgroud)
我得到的一种字符串,
string1 <- c('One\t58/2', 'Two 22/3', 'Three\t15/5')
str_to_df(string1)
#> [,1] [,2]
#> [1,] "One" "58/2"
#> [2,] "Two" "22/3"
#> [3,] "Three" "15/5"
Run Code Online (Sandbox Code Playgroud)
另一种类型我在同一个地方,
string2 <- c('One 58 / 2', 'Two 22 / 3', 'Three 15 / 5')
str_to_df(string2)
#> [,1] [,2] [,3] [,4]
#> [1,] "One" "58" "/" "2"
#> [2,] "Two" "22" "/" "3"
#> [3,] "Three" "15" "/" "5" …Run Code Online (Sandbox Code Playgroud)