【问题标题】:cleaning data - expanding one column to multiple columns in a dataframe清理数据 - 将数据框中的一列扩展到多列
【发布时间】:2020-05-22 05:02:50
【问题描述】:

下面的textsample 在一列中。使用 R,我希望将其分成 5 列,标题如下:“名称”、“位置”、“日期”、“时间”、“警告”。我试过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】:

这是一种至少可以帮助您入门的方法:

我们可以使用extract from 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 的第一(也是唯一)列。根据需要进行更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多