R 斜交叠合
我在一些文本中有一个字符串,格式为R 斜交叠合,r,strsplit,R,Strsplit,我在一些文本中有一个字符串,格式为“12,34,77”,包括引号 我需要把每一个数字的值放到一个列表中。我尝试使用lappy和strsplit: control2=lapply(strsplit(data$values,","),as.numeric) 但我得到了一个错误: 非字符参数 我做错了什么?试试这个: x <- "12,34,77" sapply(strsplit(x, ",")[[1]], as.numeric, USE.NAMES=FALSE) [1] 12 34 77
“12,34,77”
,包括引号
我需要把每一个数字的值放到一个列表中。我尝试使用lappy
和strsplit
:
control2=lapply(strsplit(data$values,","),as.numeric)
但我得到了一个错误:
非字符参数
我做错了什么?试试这个:
x <- "12,34,77"
sapply(strsplit(x, ",")[[1]], as.numeric, USE.NAMES=FALSE)
[1] 12 34 77
试试这个:
x <- "12,34,77"
sapply(strsplit(x, ",")[[1]], as.numeric, USE.NAMES=FALSE)
[1] 12 34 77
我认为你的问题可能源于你的原始数据。无论如何,如果你想处理数字,你必须去掉引号。我推荐
gsub
> x <- '"1,3,5"'
> x
[1] "\"1,3,5\""
> x <- gsub("\"", "", x)
> x
[1] "1,3,5"
> as.numeric(unlist(strsplit(x, ",")))
[1] 1 3 5
>x
[1] "\"1,3,5\""
>我认为你的问题可能源于你的原始数据。无论如何,如果你想处理数字,你必须去掉引号。我推荐gsub
> x <- '"1,3,5"'
> x
[1] "\"1,3,5\""
> x <- gsub("\"", "", x)
> x
[1] "1,3,5"
> as.numeric(unlist(strsplit(x, ",")))
[1] 1 3 5
>x
[1] "\"1,3,5\""
>正如已经指出的,您首先需要正则表达式指出引号
taRifx
库中的destring
函数将执行此操作(删除任何非数字字符),然后强制执行数字:
test <- '"12,34,77"'
library(taRifx)
lapply(strsplit(test,","),destring)
[[1]]
[1] 12 34 77
test正如已经指出的那样,您需要先正则表达式指出引号
taRifx
库中的destring
函数将执行此操作(删除任何非数字字符),然后强制执行数字:
test <- '"12,34,77"'
library(taRifx)
lapply(strsplit(test,","),destring)
[[1]]
[1] 12 34 77
测试1)系带
1a)标量这是一个使用gsubfn软件包中的Straply
的一行程序:
library(gsubfn)
x <- '"12,34,567"'
strapply(x, "\\d+", as.numeric, simplify = c)
## [1] 12 34 567
2)gsub和扫描
2a)标量这里是一个使用gsub
和scan
的线性函数:
scan(text = gsub('"', '', x), what = 0, sep = ",")
## Read 3 items
## [1] 12 34 567
2b)矢量化矢量化版本将涉及组件的重叠
:
lapply(v, function(x) scan(text = gsub('"', '', x), what = 0, sep = ","))
lapply(v, function(x) as.numeric(strsplit(x, '[",]')[[1]][-1]))
3)strsplit
3a)标量这里是一个strsplit
解决方案。请注意,我们在“
和,
上进行了拆分:
as.numeric(strsplit(x, '[",]')[[1]][-1])
## [1] 12 34 567
3b)矢量化矢量化解决方案将再次涉及组件的重叠:
lapply(v, function(x) scan(text = gsub('"', '', x), what = 0, sep = ","))
lapply(v, function(x) as.numeric(strsplit(x, '[",]')[[1]][-1]))
3c)矢量化-更简单或稍微简单:
lapply(strsplit(gsub('"', '', v), split = ","), as.numeric)
1)捆扎
1a)标量这是一个使用gsubfn软件包中的Straply
的一行程序:
library(gsubfn)
x <- '"12,34,567"'
strapply(x, "\\d+", as.numeric, simplify = c)
## [1] 12 34 567
2)gsub和扫描
2a)标量这里是一个使用gsub
和scan
的线性函数:
scan(text = gsub('"', '', x), what = 0, sep = ",")
## Read 3 items
## [1] 12 34 567
2b)矢量化矢量化版本将涉及组件的重叠
:
lapply(v, function(x) scan(text = gsub('"', '', x), what = 0, sep = ","))
lapply(v, function(x) as.numeric(strsplit(x, '[",]')[[1]][-1]))
3)strsplit
3a)标量这里是一个strsplit
解决方案。请注意,我们对“
和,
进行了拆分:
as.numeric(strsplit(x, '[",]')[[1]][-1])
## [1] 12 34 567
3b)矢量化矢量化解决方案将再次涉及组件的重叠:
lapply(v, function(x) scan(text = gsub('"', '', x), what = 0, sep = ","))
lapply(v, function(x) as.numeric(strsplit(x, '[",]')[[1]][-1]))
3c)矢量化-更简单或稍微简单:
lapply(strsplit(gsub('"', '', v), split = ","), as.numeric)
其他用户发布的解决方案是:control2=lapply(strsplit(as.character(data$values),“,”),as.numeric),工作正常。Thanks@Manolo那么您就没有引号了。:)看到了吗as.numeric(“'9””)
其他用户发布的解决方案是:control2=lapply(strsplit(as.character(data$values),“,”),as.numeric),工作正常。Thanks@Manolo那么您就没有引号了。:)看到了吗as.numeric(“'9””)
现在回答您的问题,不需要额外的解析,gsub
-bing或regex
-ing。现在回答您的问题,不需要额外的解析,gsub
-bing或regex
-ing。