在R中将一列中包含的数据拆分为三列
我有一个包含字符向量(实际上是数字)的数据集,我想将其拆分为3个不同的列。这3列需要有原始列中包含的3个数字在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
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)