R 如何将保存为字符串的序列转换为数字?
如何将保存为字符串的序列转换为数字 让我们使用字符串R 如何将保存为字符串的序列转换为数字?,r,string,numeric,R,String,Numeric,如何将保存为字符串的序列转换为数字 让我们使用字符串“3:7”。我想得到c(3,4,5,6,7),或者3:7,不管怎样,R将这些数据读取为数字,而不是字符串 如果我把作为.numeric(“3:7”)我会得到一个NA。有没有什么简单的方法或功能在R做这件事 一个更复杂的例子: rec_pairs <- list(c("3:7", "1"), c("2,1", "3"), c("NA", "5"), c("6", "NA")) rec\u pairs我们可以使用eval(parse eva
“3:7”
。我想得到c(3,4,5,6,7)
,或者3:7
,不管怎样,R将这些数据读取为数字,而不是字符串
如果我把作为.numeric(“3:7”)
我会得到一个NA
。有没有什么简单的方法或功能在R做这件事
一个更复杂的例子:
rec_pairs <- list(c("3:7", "1"), c("2,1", "3"), c("NA", "5"), c("6", "NA"))
rec\u pairs我们可以使用eval(parse
eval(parse(text = "3:7"))
或拆分
和转换使用序列
Reduce(`:`, scan(text="3:7", sep=":", what = numeric()))
根据新的数据
unlist(sapply(rec_pairs, function(x) lapply(strsplit(x[1], "[,:]"),
function(y) Reduce(`:`, as.list(as.numeric(y))))))
#[1] 3 4 5 6 7 2 1 NA 6
使用eval
和parse
的方法将是最有效的方法。下面是另一个使用base R
的解决方案:
v <- as.numeric(unlist(strsplit("3:7",":")))
s <- seq(v[1],v[2])
谢谢@akrun。我有“3:7”
在表达式的字符向量中应用sapply
的结果。我应该在回答之后,添加另一个sapply
来计算表达式的完整向量,还是有一个较短的方法?谢谢!@iago您可以在列表中使用strsplit
,然后对每个元素执行Reduce
。Pl请使用基准检查计时根据您的指示,我尝试减少(
:,strsplit(sapply(rec_对,函数(I)I[1]),split=“,”,fixed=TRUE))
我在问题中添加了一个较新的示例,但我得到了一个错误。@iagostrsplit
返回一个字符串。此外,它可以直接应用于rec\u对
即lapply(strsplit(rec\u对,,”,fixed=TRUE),函数(x)Reduce(
:,as.list(as.numeric(x)))
它给了我一个错误:rec\u pairs
是一个列表,并且strsplit
只适用于向量。此外,我不希望rec\u pairs
中的所有元素都是rec\u pairs
只想指出编辑的示例与原始示例非常不同。另外,如果有6个,您如何定义distinct?关于“distinct”观察,你是对的,这是一个很糟糕的例子(两个6应该只算一次),但这不是一个问题,以后使用unique
对吧,但是如果你给出的例子与你描述的不匹配,那么不清楚使用unique值是否真的能满足你的要求
> s
[1] 3 4 5 6 7