首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一列中包含的数据拆分为R中的3列

将一列中包含的数据拆分为R中的3列
EN

Stack Overflow用户
提问于 2020-10-18 09:37:44
回答 3查看 72关注 0票数 1

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

代码语言:javascript
复制
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)

我期望的结果是这样的。

代码语言:javascript
复制
value1       value2        value3
 1.50          1.30          1.70
 1.30          1.20          1.50
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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"丢弃无警告的丢弃数据:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2020-10-18 11:43:23

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

代码语言:javascript
复制
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是空格。

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

票数 0
EN

Stack Overflow用户

发布于 2020-10-18 12:32:50

你可以试试这段代码:

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64408920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档