标签: strsplit

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

我一直试图在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
查看次数

用正则表达式拆分字符串

我正在寻找一个通用形式的字符串,其中方括号表示字符串的"部分".例如:

x <- "[a] + [bc] + 1"
Run Code Online (Sandbox Code Playgroud)

并返回一个如下所示的字符向量:

"[a]"  " + "  "[bc]" " + 1"
Run Code Online (Sandbox Code Playgroud)

编辑:结束使用此:

x <- "[a] + [bc] + 1"
x <- gsub("\\[",",[",x)
x <- gsub("\\]","],",x)
strsplit(x,",")
Run Code Online (Sandbox Code Playgroud)

regex r strsplit

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

strsplit带竖杆(管)

这里,

> r<-c("AAandBB", "BBandCC")
> strsplit(as.character(r),'and')
[[1]]
[1] "AA" "BB"

[[2]]
[1] "BB" "CC"
Run Code Online (Sandbox Code Playgroud)

运作良好,但是

> r<-c("AA|andBB", "BB|andCC")
> strsplit(as.character(r),'|and')
[[1]]
[1] "A" "A" "|" ""  "B" "B"

[[2]]
[1] "B" "B" "|" ""  "C" "C"
Run Code Online (Sandbox Code Playgroud)

在这里,答案是不正确的.当我使用'|和'时,如何获得"AA"和"BB"?
提前致谢.

string split r strsplit

8
推荐指数
1
解决办法
9652
查看次数

R - 使用str_split和unlist创建两列

我有一个数据集,在同一列中有日期和利率.我需要将这两个数字拆分为两个单独的列,但是当我使用以下代码时:

 Split <- str_split(df$Dates, "[ ]", n = 2)
 Dates <- unlist(Split)[1]
 Rates <- unlist(Split)[2]
Run Code Online (Sandbox Code Playgroud)

它仅返回每个元素的第一个"值",即日期的"1971-04-01"和费率的"7.43".我需要它返回字符串拆分部分的所有值,并为字符串拆分的第二部分返回相同的值

下面是数据集的一部分,总行数= 518.

    1971-04-01   7.31
    1971-05-01   7.43
    1971-06-01   7.53
    1971-07-01   7.60
    1971-08-01   7.70
    1971-09-01   7.69
    1971-10-01   7.63
    1971-11-01   7.55
    1971-12-01   7.48
    1972-01-01   7.44
Run Code Online (Sandbox Code Playgroud)

谢谢

r strsplit

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

正则表达式; 消除所有标点符号除外

我有以下正则表达式分裂任何空格或标点符号.如何从中排除1个或多个标点字符:punct:?假设我想排除撇号和逗号.我知道我可以明确使用[all punctuation marks in here]而不是,[[:punct:]]但我希望有一个排除方法.

X <- "I'm not that good at regex yet, but am getting better!"
strsplit(X, "[[:space:]]|(?=[[:punct:]])", perl=TRUE)

 [1] "I"       "'"       "m"       "not"     "that"    "good"    "at"      "regex"   "yet"    
[10] ","       ""        "but"     "am"      "getting" "better"  "!"
Run Code Online (Sandbox Code Playgroud)

r strsplit

7
推荐指数
1
解决办法
2024
查看次数

从strsplit-R之后的嵌套列表中提取第n个元素

我一直在努力了解如何strsplit更好地处理输出.我经常有这样的数据,我想分开:

mydata <- c("144/4/5", "154/2", "146/3/5", "142", "143/4", "DNB", "90")

#[1] "144/4/5" "154/2"   "146/3/5" "142"     "143/4"   "DNB"     "90"     
Run Code Online (Sandbox Code Playgroud)

拆分后,结果如下:

strsplit(mydata, "/")

#[[1]]
#[1] "144" "4"   "5"  

#[[2]]
#[1] "154" "2"  

#[[3]]
#[1] "146" "3"   "5"  

#[[4]]
#[1] "142"

#[[5]]
#[1] "143" "4"  

#[[6]]
#[1] "DNB"

#[[7]]
#[1] "90"
Run Code Online (Sandbox Code Playgroud)

我从strsplit帮助指南中知道最终的空字符串不会产生.因此,根据要拆分的"/"数,我的每个结果中都会有1,2或3个元素

获得第一个元素非常简单:

sapply(strsplit(mydata, "/"), "[[", 1)

#[1] "144" "154" "146" "142" "143" "DNB" "90" 
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何获得第2,第3 ......当每个结果中存在这些不等数量的元素时.

sapply(strsplit(mydata, "/"), "[[", 2)

# Error in FUN(X[[4L]], ...) : subscript out of bounds …
Run Code Online (Sandbox Code Playgroud)

r strsplit sapply

7
推荐指数
1
解决办法
5250
查看次数

R:如何从一串单词中显示前n个字符

我有以下字符串:

 Getty <- "Four score and seven years ago our fathers brought forth on this continent a new nation, conceived in liberty, and dedicated to the proposition that all  men are created equal."
Run Code Online (Sandbox Code Playgroud)

我想显示前10个字符.所以我开始将字符串拆分为单个字符:

 split <- strsplit(Getty, split="")
 split 
Run Code Online (Sandbox Code Playgroud)

我得到了所有个人角色.然后我创建前10个字符的子字符串.

 first.10 <- substr(split, start=1, stop=10)
 first.10
Run Code Online (Sandbox Code Playgroud)

这是输出:

 "c(\"F\", \"o\""
Run Code Online (Sandbox Code Playgroud)

我不明白为什么打印出来?我以为它会打印出如下内容:

 "F" "o" "u" "r" "s" 
Run Code Online (Sandbox Code Playgroud)

有没有办法可以改变我的代码来打印上面的内容?

谢谢大家!

string r substr strsplit

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

R拆分字符串并保持匹配右边的子字符串?

如何在R中执行stringsplit()?当没有由破折号分隔的名字时,停止分裂.保持结果中给出的右侧子字符串.

a <- c("tim/tom meyer XY900 123kncjd", "sepp/max/peter moser VK123 456xyz")

# result: 
c("tim meyer XY900 123kncjd", "tom meyer XY900 123kncjd", "sepp moser VK123 456xyz", "max moser VK123 456xyz", "peter moser VK123 456xyz")
Run Code Online (Sandbox Code Playgroud)

r strsplit

7
推荐指数
1
解决办法
954
查看次数

如何仅在第一个数字上拆分字符串

所以我有一个街道地址的数据集,它们的格式非常不同.例如:

d <- c("street1234", "Street 423", "Long Street 12-14", "Road 18A", "Road 12 - 15", "Road 1/2")
Run Code Online (Sandbox Code Playgroud)

从这里我想创建两列.1. X:街道地址和2. Y:数字+随后的所有内容.像这样:

X           Y
Street      1234
Street      423
Long Street 12-14
Road        18A
Road        12 - 15
Road        1/2
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已尝试过strsplit,并在此处遵循了一些类似的问题,例如:strsplit(d, split = "(?<=[a-zA-Z])(?=[0-9])", perl = T)).我似乎无法找到正确的正则表达式.

任何帮助都非常感谢.先感谢您!

regex r strsplit

7
推荐指数
1
解决办法
1819
查看次数

如何将字符串 "a\n\nb" 拆分为 c("a", "", "", "b")?

当我stringr::str_split通过“\n”“\n\na\n”时,我得到了c("", "", "a", "").

c("a", "", "", "b")我期望当我stringr::str_split通过“\n”“a\n\nb”时可以获得,但我c("a", "", "b")却获得了。如何c("a", "", "", "b")通过拆分“a\n\n\a”来获得?

尝试:

stringr::str_split("a\n\nb", "\n")
Run Code Online (Sandbox Code Playgroud)

预计:

c("a", "", "", "b")
Run Code Online (Sandbox Code Playgroud)

结果:

c("a", "", "b")
Run Code Online (Sandbox Code Playgroud)

r strsplit stringr

7
推荐指数
1
解决办法
105
查看次数

标签 统计

r ×10

strsplit ×10

regex ×3

string ×2

sapply ×1

split ×1

stringr ×1

substr ×1