将带有范围的字符串转换为R中的数值向量

问题描述 投票:0回答:1

我有一个数据框,其中有一列包含值范围以及单个值,如下所示:

x <- c("a","b")
y <- c("1:3,7","9")

dat <- data.frame("char"=x,"range"=y)

> dat
  char range
1    a 1:3,7
2    b     9

我需要做的是转换

range
列,以便显示范围中包含的所有值:

> dat2
  char   range
1    a 1,2,3,7
2    b       9

由于这个非常相似的问题中提供的解决方案,我已经取得了进展:

v1 <- c("1:3")

unlist(lapply(v1, function(x) eval(parse(text=x))))

[1] 1 2 3 9

但这只能让我到目前为止,因为当然,如果我传递一个也有单个值的向量,就像我原来的

range
列,它会抛出一个错误:

v1 <- c("1:3,7","9")

unlist(lapply(v1, function(x) eval(parse(text=x))))

Error in parse(text = x) : <text>:1:4: unexpected ','
1: 1:3,
^

此外,我无法自动将此解决方案应用于数据框列,因为它返回单独的数值,而我需要一个字符串。如有任何帮助,我们将不胜感激。

r strsplit
1个回答
0
投票

以下修改可以满足您的需求...

v1 <- c("1:3,7","9")

unlist(lapply(v1, function(x) paste(eval(parse(text=paste0("c(",x,")"))), 
                                    collapse = ",")))

[1] "1,2,3,7" "9" 
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.