在R中将一列中包含的数据拆分为三列

在R中将一列中包含的数据拆分为三列,r,split,R,Split,我有一个包含字符向量(实际上是数字)的数据集,我想将其拆分为3个不同的列。这3列需要有原始列中包含的3个数字 Data<-data.frame(c("1.50 (1.30 to 1.70)", "1.30 (1.20 to 1.50)"))` colnames(Data)<- "values" Data values 1.50 (1.30 to 1.70) 1.30 (1.20 to 1

我有一个包含字符向量(实际上是数字)的数据集,我想将其拆分为3个不同的列。这3列需要有原始列中包含的3个数字

Data<-data.frame(c("1.50 (1.30 to 1.70)", "1.30 (1.20 to 1.50)"))`

colnames(Data)<- "values"

Data

        values
    1.50 (1.30 to 1.70)
    1.30 (1.20 to 1.50)

一种方法是在包
tidyr
中使用
separate
。从文档中:
使用正则表达式或数字位置将字符列分隔为多个列

改编文档中的示例,使用十进制,并使用
extra=“drop”
在没有警告的情况下删除丢弃的数据:

数据2 13.02 120 150.5

我们还可以使用
extract
指定正则表达式模式来提取数据

tidyr::extract(Data, values, paste0("value",1:3), 
             regex = '(\\d+\\.\\d+)\\s\\((\\d+\\.\\d+)\\sto\\s(\\d+\\.\\d+)\\)')

#  value1 value2 value3
#1   1.50   1.30   1.70
#2   1.30   1.20   1.50
(\\d+\.\\d+
用于提取十进制值

\\s
是空白

我们使用捕获组在三个不同的列中提取值。

您可以尝试以下代码:

library(easyr)
x = data.frame(c("1.50 (1.30 to 1.70)", "1.30 (1.20 to 1.50)"))
colnames(x)[1] = "val"
x$val1 = left(x$val, 4)
x$val2 = mid(x$val, 7,4)
x$val3 = mid(x$val, 15,4)

这样做有用吗<代码>库(tidyr)
分离(数据,col=value,into=paste0(“value”,1:3),sep=“[^[:digit:][+”)
谢谢!它适用于整数值。但是,我有一些像“1.131(1.061到1.208)”这样的值,它对这些值不起作用。这应该起作用:
suppressWarnings(分离(Data,col=values,into=paste0(“value”,1:3),sep=“[^[:digit:]?\\.]+”)
OMG非常感谢你,它起作用了!好的,我加上这个作为回答
library(easyr)
x = data.frame(c("1.50 (1.30 to 1.70)", "1.30 (1.20 to 1.50)"))
colnames(x)[1] = "val"
x$val1 = left(x$val, 4)
x$val2 = mid(x$val, 7,4)
x$val3 = mid(x$val, 15,4)