Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何将保存为字符串的序列转换为数字?_R_String_Numeric - Fatal编程技术网

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))
我在问题中添加了一个较新的示例,但我得到了一个错误。@iago
strsplit
返回一个字符串。此外,它可以直接应用于
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