我有一个包含字符向量(实际上是数字)的数据集,我想将其拆分为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)我期望的结果是这样的。
value1 value2 value3
1.50 1.30 1.70
1.30 1.20 1.50发布于 2020-10-18 10:54:46
实现这一点的一种方法是使用tidyr包中的seperate。来自文档:Separate a character column into multiple columns with a regular expression or numeric locations
采用文档中的示例,使用decimal,并使用extra="drop"丢弃无警告的丢弃数据:
Data<-data.frame(c("1.50 (1.30 to 1.70)", "1.30 (1.20 to 1.50)")))
colnames(Data)<- "values"
Data
require(tidyr)
separate(Data, col = values, into = paste0("value",1:3),
sep = "[^[:digit:]?\\.]+" , extra="drop")
#output
value1 value2 value3
> 1 150 0.130 170.0
> 2 13.02 120 150.5发布于 2020-10-18 11:43:23
我们还可以使用指定正则表达式模式的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是空格。
我们使用捕获组在三个不同的列中提取值。
发布于 2020-10-18 12:32:50
你可以试试这段代码:
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)https://stackoverflow.com/questions/64408920
复制相似问题