我有一个数据框,其中有一列包含值范围以及单个值,如下所示:
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,
^
此外,我无法自动将此解决方案应用于数据框列,因为它返回单独的数值,而我需要一个字符串。如有任何帮助,我们将不胜感激。
以下修改可以满足您的需求...
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"