我在表单的某些文本中有一个字符串"12,34,77",包括引号.
我需要将每个数字的值放入列表中.我尝试使用lapply和strsplit:
control2=lapply(strsplit(data$values,","),as.numeric)
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
非角色论证
我究竟做错了什么?
G. *_*eck 10
1)strapply
1a)标量这是使用strapplygsubfn包的单线程:
library(gsubfn)
x <- '"12,34,567"'
strapply(x, "\\d+", as.numeric, simplify = c)
## [1] 12 34 567
Run Code Online (Sandbox Code Playgroud)
1b)矢量化矢量化版本甚至更简单 - 只需删除simplify=c如下:
v <- c('"1,2,3"', '"8,9"') # test data
strapply(v, "\\d+", as.numeric)`
Run Code Online (Sandbox Code Playgroud)
2)gsub和扫描
2a)标量,这里是一个单线性使用gsub和scan:
scan(text = gsub('"', '', x), what = 0, sep = ",")
## Read 3 items
## [1] 12 34 567
Run Code Online (Sandbox Code Playgroud)
2b)矢量化矢量化版本将涉及lapply组件:
lapply(v, function(x) scan(text = gsub('"', '', x), what = 0, sep = ","))
Run Code Online (Sandbox Code Playgroud)
3)strsplit
3a)标量,这是一个strsplit解决方案.请注意,我们分开在两个"和,:
as.numeric(strsplit(x, '[",]')[[1]][-1])
## [1] 12 34 567
Run Code Online (Sandbox Code Playgroud)
3b)矢量化矢量化解决方案将再次涉及lapply组件:
lapply(v, function(x) as.numeric(strsplit(x, '[",]')[[1]][-1]))
Run Code Online (Sandbox Code Playgroud)
3c)矢量化 - 更简单或更简单:
lapply(strsplit(gsub('"', '', v), split = ","), as.numeric)
Run Code Online (Sandbox Code Playgroud)