标签: strsplit

如何对R strsplit进行矢量化?

创建使用的函数时strsplit,矢量输入的行为不符合要求,sapply需要使用.这是由于产生的列表输出strsplit.有没有办法对流程进行矢量化 - 也就是说,函数会在列表中为输入的每个元素生成正确的元素?

例如,要计算字符向量中单词的长度:

words <- c("a","quick","brown","fox")

> length(strsplit(words,""))
[1] 4 # The number of words (length of the list)

> length(strsplit(words,"")[[1]])
[1] 1 # The length of the first word only

> sapply(words,function (x) length(strsplit(x,"")[[1]]))
a quick brown   fox 
1     5     5     3 
# Success, but potentially very slow
Run Code Online (Sandbox Code Playgroud)

理想情况下,像length(strsplit(words,"")[[.]])where 这样的东西.被解释为输入向量的相关部分.

r vectorization strsplit

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

行strsplit rowwise

我试图在"."上分割一个字符串.并使用"."之前和之后的两个字符串创建其他列.

tes<-c("1.abc","2.di","3.lik")
dat<-c(5,3,2)
h<-data.frame(tes,dat)
h$num<-substr(h$tes,1,1)

h$prim<-unlist(strsplit(as.character(h$tes),"\\."))[2]
h$prim<-sapply(h$tes,unlist(strsplit(as.character(h$tes),"\\."))[2])
Run Code Online (Sandbox Code Playgroud)

我想h$prim包含"abc","di","lik"..但是我无法弄明白.我猜strsplit不是矢量化,但后来我认为该sapply版本应该有效.但是我认为应该很容易:-)

问候,// M

r strsplit

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

在R中使用strsplit(),忽略括号中的任何内容

我试图strsplit()在R中使用基于逗号将字符串分解成碎片,但我不想在括号中拆分任何东西.我认为答案是正则表达式,但我正在努力使代码正确.

例如:

x <- "This is it, isn't it (well, yes)"
> strsplit(x, ", ")
[[1]]
[1] "This is it"     "isn't it (well" "yes)" 
Run Code Online (Sandbox Code Playgroud)

当我想要的是:

[1] "This is it"     "isn't it (well, yes)"
Run Code Online (Sandbox Code Playgroud)

regex r strsplit

14
推荐指数
2
解决办法
925
查看次数

strsplit与gregexpr不一致

注释对我的回答这个问题,应该使用得到期望的结果strsplit没有,即使它似乎在一个字符向量正确匹配的第一个和最后逗号.这可以使用gregexpr和证明regmatches.

那么为什么strsplit在这个例子中对每个逗号进行拆分,即使regmatches只返回同一个正则表达式的两个匹配?

#  We would like to split on the first comma and
#  the last comma (positions 4 and 13 in this string)
x <- "123,34,56,78,90"

#  Splits on every comma. Must be wrong.
strsplit( x , '^\\w+\\K,|,(?=\\w+$)' , perl = TRUE )[[1]]
#[1] "123" "34"  "56"  "78"  "90" 


#  Ok. Let's check the positions of matches for this regex …
Run Code Online (Sandbox Code Playgroud)

regex pcre r strsplit

13
推荐指数
1
解决办法
224
查看次数

R从字符串中提取第一个数字

我在变量中有一个字符串,我们称之为v1.该字符串表示图片编号,采用"Pic 27 + 28"的形式.我想提取第一个数字并将其存储在一个名为item的新变量中.

我尝试过的一些代码是:

item <- unique(na.omit(as.numeric(unlist(strsplit(unlist(v1),"[^0-9]+")))))
Run Code Online (Sandbox Code Playgroud)

这很好,直到我找到了一个列表:

[1,] "Pic 26 + 25"
[2,] "Pic 27 + 28"
[3,] "Pic 28 + 27"
[4,] "Pic 29 + 30"
[5,] "Pic 30 + 29"
[6,] "Pic 31 + 32"
Run Code Online (Sandbox Code Playgroud)

在这一点上,我获得了比我想要的更多的数字,因为它也抓住了其他唯一的数字(25).

我实际上尝试过使用gsub,但没有任何工作.帮助将非常感激!

regex r gsub strsplit

12
推荐指数
3
解决办法
1万
查看次数

基于R中的点分割文本

我有:

"word1.word2"
Run Code Online (Sandbox Code Playgroud)

而且我要:

"word1" "word2"
Run Code Online (Sandbox Code Playgroud)

我知道我必须使用strsplitperl = TRUE,但我找不到一段时间的正则表达式(以反馈split参数).

regex r strsplit

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

来自字符向量的数据帧,其中变量名称及其数据共同存储

我有这样的情况:

foo <- data.frame("vars" = c("animal: mouse | wks: 12 | site: cage | PI: 78",
                            "animal: dog | wks: 32 | GI: 0.2",
                            "animal: cat | wks: 8 | site: wild | PI: 13"))
Run Code Online (Sandbox Code Playgroud)

其中变量名称和相关数据存储在字符串中,如上例所示。特别是,每个variable_name/its_data单元都由|. 之后:是相关数据。

我想要一个像这样的最终数据框:

  animal  wks  site  PI   GI
  mouse   12   cage  78   NA
    dog   32   <NA>  NA  0.2
    cat    8   wild  13   NA
Run Code Online (Sandbox Code Playgroud)

r strsplit dataframe

10
推荐指数
2
解决办法
346
查看次数

按空格拆分字符串,除非包含在引号内

我一直试图在R中用双引号拆分空格分隔的字符串一段时间但没有成功.字符串的示例如下:

降雨量降雪"通道存储""小溪存储"

这对我们很重要,因为这些列标题必须与后续数据相匹配.关于如何解决这个问题,本网站还有其他建议,但它们似乎与R不兼容.一个例子:

正则表达式,用于在未被单引号或双引号括起时使用空格分割字符串

这是我一直在尝试的一些代码:

str <- 'rainfall snowfall "Channel storage" "Rivulet storage"'
regex <- "[^\\s\"']+|\"([^\"]*)\""
split <- strsplit(str, regex, perl=T)
Run Code Online (Sandbox Code Playgroud)

我想要的是什么

[1] "rainfall" "snowfall" "Channel storage" "Rivulet storage"
Run Code Online (Sandbox Code Playgroud)

但我得到的是:

[1] ""  " " " " " "
Run Code Online (Sandbox Code Playgroud)

向量是正确的长度(这是令人鼓舞的)但当然字符串是空的或包含单个空格.有什么建议?

提前致谢!

regex r strsplit

9
推荐指数
2
解决办法
1809
查看次数

如何从R中的strsplit()获取空的最后一个元素?

我需要处理一些主要是csv的数据.问题是如果它出现在行的末尾(例如,下面示例中的3之后的那个),则R忽略逗号.

> strsplit("1,2,3,", ",")
[[1]]
[1] "1" "2" "3"
Run Code Online (Sandbox Code Playgroud)

[1] "1" "2" "3" NA相反,我希望将其读入.我怎样才能做到这一点?谢谢.

csv string r strsplit

9
推荐指数
2
解决办法
1699
查看次数

在dplyr和mutate中使用strsplit和subset

我有一个包含一个字符串列的数据表.我想使用strsplit创建另一列作为此列的子集.

dat <- data.table(labels=c('a_1','b_2','c_3','d_4'))
Run Code Online (Sandbox Code Playgroud)

我想要的输出是

label  sub_label
a_1    a
b_2    b
c_3    c
d_4    d 
Run Code Online (Sandbox Code Playgroud)

我尝试过以下但似乎都没有效果.

dat %>%
    mutate(
        sub_labels=strsplit(as.character(labels), "_")[[1]][1]
    ) 
# gives a column whose values are all "a"
Run Code Online (Sandbox Code Playgroud)

这个对我来说合乎逻辑,

dat %>%
    mutate(
        sub_labels=sapply(strsplit(as.character(labels), "_"), function(x) x[[1]][1])
    )
Run Code Online (Sandbox Code Playgroud)

给出错误

错误:不知道如何处理类型的pairlist

我看到另一个文章,其中strsplit的输出上的粘贴崩溃工作,所以我不明白为什么匿名函数中的子集正在给出问题.感谢您对此的任何澄清.

r strsplit dplyr

9
推荐指数
4
解决办法
8020
查看次数

标签 统计

r ×10

strsplit ×10

regex ×5

csv ×1

dataframe ×1

dplyr ×1

gsub ×1

pcre ×1

string ×1

vectorization ×1