首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用多个分隔符分隔数字和字符,然后生成矩阵。

用多个分隔符分隔数字和字符,然后生成矩阵。
EN

Stack Overflow用户
提问于 2017-12-14 09:25:13
回答 1查看 53关注 0票数 0

我有一个数据集如下

代码语言:javascript
复制
1       Saturday,SatAug 13, 2016-5:30 PM
2                  54.362·Robert Madley
3         Sunday,SunAug 14, 2016-1:30 PM
4        11.355 sold out·Andre Marriner

我想要做的是用",“或"·”分隔数据集,然后将其作为矩阵或数据格式。在line4的情况下,也需要将11.355和“售出”分开。所以最终的数据集应该是

代码语言:javascript
复制
date       date1       time           a        f                s
Saturday   SatAug 13   2016-5:30 PM   54.362   Robert Madley
Sunday     SunAug 14   2016-1:30 PM   11.355   Andre Marriner   sold out
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-14 17:41:21

假设观察总是由原始数据中的两个数据行组成,下面是一个使用dplyr + tidyr的解决方案

代码语言:javascript
复制
library(dplyr)
library(tidyr)

df %>%
  mutate(ID = c(0, rep(1:(n()-1)%/%2))) %>%
  group_by(ID) %>%
  mutate(ID2 = paste0('V', row_number())) %>%
  spread(ID2, V2) %>%
  separate(V1, c("date", "date1", "time"), sep = ",\\s?") %>%
  extract(V2, c("a", "s", "f"), regex = "^(\\d+\\.\\d+\\b)(\\b.+)?·(.+)", convert = TRUE)

结果:

代码语言:javascript
复制
# A tibble: 2 x 7
# Groups:   ID [2]
     ID     date     date1         time      a         s              f
* <dbl>    <chr>     <chr>        <chr>  <dbl>     <chr>          <chr>
1     0 Saturday SatAug 13 2016-5:30 PM 54.362      <NA>  Robert Madley
2     1   Sunday SunAug 14 2016-1:30 PM 11.355  sold out Andre Marriner

数据:

代码语言:javascript
复制
df = read.table(text = "1|Saturday,SatAug 13, 2016-5:30 PM
2|54.362·Robert Madley
3|Sunday,SunAug 14, 2016-1:30 PM
4|11.355 sold out·Andre Marriner", sep = "|", row.names = 1,
                stringsAsFactors = FALSE)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47809865

复制
相关文章

相似问题

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