清理数据-在数据框中将一列扩展为多列

问题描述 投票:1回答:1

下面的textsample在一栏中。我希望使用R将其分为5列,并带有以下标题:“ Name”,“ Location”,“ Date”,“ Time”,“ Warning”。我尝试过separate()strsplit(),但尚未成功。我希望这里有人可以提供帮助。

textsample <- "Name : York-APC-UPS\r\n
    Location : York SCATS Zigzag Road\r\n
    Contact  : Mechanical  services\r\n
    \r\n
    http://York-APC-UPS.domain25.minortracks.wa.gov.au\r\n
    http://192.168.70.56\r\n
    http://FE81::3C0:B8FF:FE6D:8065\r\n
    Serial Number : 5A1149T24253\r\n
    Device Serial Number : 5A1149T24253\r\n
    Date : 12/06/2018\r\n
    Time : 08:45:46\r\n
    Code : 0x0125\r\n
    \r\n
    Warning : A high humidity threshold violation exists for integrated Environmental Monitor TH Sensor 
   (Port 1 Temp 1 at Port 1) reporting over 50%CD.\r\n"
r tidyverse tidyr stringr tidy
1个回答
0
投票

这里至少应该让您入门:

我们可以使用extract中的tidyr提取带有正则表达式的目标文本。

然后我们可以使用mutate_all施加相同的str_replace来去除标签。

library(dplyr)
library(tidyr)
library(stringr)
as.data.frame(extsample) %>% 
  extract(1, into=c("Name","Location","Date","Time","Warning"),
             regex = "(Name : .+)[^$]*(Location : .+)[^$]*(Date : .+)[^$]*(Time : .+)[^$]*(Warning : .+)[^$]*") %>%
  mutate_all(list(~str_replace(.,"^\\w+ : ","")))
#          Name               Location       Date     Time
#1 York-APC-UPS York SCATS Zigzag Road 12/06/2018 08:45:46
#                                                                                     Warning
#1 A high humidity threshold violation exists for integrated Environmental Monitor TH Sensor 

这依赖于使用()捕获组,有关详细信息,请参见help(tidyr::extract)。我们使用[^$]*来匹配组之间字符串0或更多次以外的任何其他内容。

注意extract的第一个参数是1,它表示我从示例数据中得出的data.frame的第一列(也是唯一列)。根据需要更改此设置。

© www.soinside.com 2019 - 2024. All rights reserved.