标签: strsplit

R中strsplit忽略大小写

我知道在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)

但请注意,正则表达式本身确实可以在线工作

regex r case-sensitive strsplit

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

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”?

我想在每个大写字母之前使用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)

regex r strsplit

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

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

我需要一种方法来每 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中列中的特定字符

我有一个名为LOAN的表,其中包含名为RATE的列,其中观察以百分比形式给出,例如14.49%我如何格式化表格以便编辑速率中的所有值并从条目中删除%以便我可以使用绘图函数我试过用strsplit.

strsplit(LOAN$RATE,"%")
Run Code Online (Sandbox Code Playgroud)

但得到错误非字符参数

r strsplit

4
推荐指数
2
解决办法
3万
查看次数

拆分字符串而不丢失字符

我希望将字符串拆分为某个字符,同时将该字符保留在第二个结果字符串中.我可以实现几乎所有所需的操作,除了我丢失了我指定的字符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)

regex split r strsplit

4
推荐指数
1
解决办法
606
查看次数

如何将数据框中的每个列拆分为两列?

我有一个这样的数据框(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)

loops r strsplit rbind

4
推荐指数
2
解决办法
138
查看次数

在R中用逗号分割和重新排序字符串

我有数年有关个人的数据,但是他们的姓名每年的格式不同。名称中的一半已经按“ 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)

我已经打印了正确的名称,但是倒退了,并且将它们打印在错误的行上,但是尽管进行了谷歌搜索,但我仍然无法正常工作。我究竟做错了什么?

r strsplit dataframe

4
推荐指数
1
解决办法
441
查看次数

拆分一个数据帧中的所有列,并在R中创建两个数据帧

我有一个数据框(让我们称之为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)

r strsplit dataframe

4
推荐指数
1
解决办法
373
查看次数

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)

r strsplit dataframe

4
推荐指数
2
解决办法
106
查看次数

标签 统计

r ×10

strsplit ×10

regex ×4

dataframe ×3

case-sensitive ×1

loops ×1

rbind ×1

separator ×1

split ×1

string ×1