将多维SI单元拆分为各个单元并列出

时间:2017-07-21 06:20:08

标签: arrays r regex string

我想使用正则表达式来挑选多维单元中的单位,将其输出为SI单位字符列表。

例如,将3维单位kg/h/mlkg h-1ml-1拆分为此'kg' 'h' 'ml'

因此,分隔符始终是前后的空格,后面的-1或单位前的/。有时我也得到一个.,那是在一个单位之前。

这意味着角色实际上无关紧要......只要识别出分隔符。

我提供了n维“单位”的示例列表(在本例中为3):

eggie <- c('kg/h/ml', 'mg h-1kPa-1', 'kg h-1 l-1', 
           'kg /h /ml', 'kg / h / ml', '% /h.ml')

输出应提供一个包含n列的矩阵(在本例中为3),否则会为kgh-1l-1等在第一个和第二个单元之间没有分隔符的情况输出错误。

更新即可。提供有关“错误”的更多信息,因为我被问及 - 如果 n 为3,但输出为列表中的任何字符串吐出2(或更少)单位,在这种情况下,它不应该输出矩阵。我可能可以编写函数的那部分代码,但是如果有人能够使错误消息调出错误的位置(那将会让我感觉很难找到,但其他任何人,秒)。

     [,1]  [,2]  [,3]
[1,] "kg"  "h"   "ml"
[2,] "mg"  "h"   "kPa"
[3,] "kg"  "h"   "l"
[4,] "kg"  "h"   "ml"
[5,] 'kg"  "h"   "ml"
[6,] "%"   "h"   "ml"

我已经阅读了this中的教程,并认为它可能需要一个包含gsubstrsplit组合的函数(我可能完全错了)。但这就像为我学习一门全新的语言。

非常感谢任何帮助(或指向正确的资源以解决这个问题)。

1 个答案:

答案 0 :(得分:1)

您似乎想要使用精确的分隔符模式分割您拥有的数据,即

  • - +位数(S)
  • 其中一个字符:/.或空格

这种模式是

pat <- "(?:-1|[/.[:space:]])+"

(?:-1|[/.[:space:]])+正则表达式模式匹配-1 char序列(-1)或(|)的一个或多个序列/,{. { {1}}或空格([/.[:space:]])。

使用

read.table(text=gsub(pat, " ", eggie), header=FALSE, col.names=c("Unit1","Unit2","Unit3"))

请参阅R demo

一旦字段数不符合预期,就会产生错误(参见stderr):

  

扫描错误(file = file,what = what,sep = sep,quote = quote,dec = dec,:

   第7行没有3个元素
  电话:read.table - &gt;扫描
  执行暂停