如何将保存为字符串的序列转换为数字?
How to convert to numeric a sequence saved as a string?
如何将保存为字符串的序列转换为数字?
让我们得到字符串 "3:7"
。我想得到 c(3,4,5,6,7)
或 3:7
,无论如何 R 将此数据读取为数字,而不是字符串。
如果我这样做 as.numeric("3:7")
,我会得到一个 NA
。 R 中是否有任何简单的方法或函数可以做到这一点?
一个更复杂的例子:
rec_pairs <- list(c("3:7", "1"), c("2,1", "3"), c("NA", "5"), c("6", "NA"))
我有兴趣获取列表向量第一个分量中的所有不同元素,即 3,4,5,6,7,2,1,NA,6
。
我们可以使用 eval(parse
eval(parse(text = "3:7"))
或 split
并使用 seq
进行转换
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])
这样
> s
[1] 3 4 5 6 7
如何将保存为字符串的序列转换为数字?
让我们得到字符串 "3:7"
。我想得到 c(3,4,5,6,7)
或 3:7
,无论如何 R 将此数据读取为数字,而不是字符串。
如果我这样做 as.numeric("3:7")
,我会得到一个 NA
。 R 中是否有任何简单的方法或函数可以做到这一点?
一个更复杂的例子:
rec_pairs <- list(c("3:7", "1"), c("2,1", "3"), c("NA", "5"), c("6", "NA"))
我有兴趣获取列表向量第一个分量中的所有不同元素,即 3,4,5,6,7,2,1,NA,6
。
我们可以使用 eval(parse
eval(parse(text = "3:7"))
或 split
并使用 seq
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])
这样
> s
[1] 3 4 5 6 7