我一直试图在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)
向量是正确的长度(这是令人鼓舞的)但当然字符串是空的或包含单个空格.有什么建议?
提前致谢!
我正在寻找一个通用形式的字符串,其中方括号表示字符串的"部分".例如:
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) 这里,
> 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"?
提前致谢.
我有一个数据集,在同一列中有日期和利率.我需要将这两个数字拆分为两个单独的列,但是当我使用以下代码时:
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)
谢谢
我有以下正则表达式分裂任何空格或标点符号.如何从中排除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) 我一直在努力了解如何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) 我有以下字符串:
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)
有没有办法可以改变我的代码来打印上面的内容?
谢谢大家!
如何在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) 所以我有一个街道地址的数据集,它们的格式非常不同.例如:
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)).我似乎无法找到正确的正则表达式.
任何帮助都非常感谢.先感谢您!
当我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)