R: 正在删除空白+分隔符



我对R语言相当陌生。所以我有一个包含以下内容的向量:

> head(sampleVector)
[1] "| txt01 |   100 |         200 |       123.456 |           0.12345 |"
[2] "| txt02 |   300 |         400 |       789.012 |           0.06789 |"

我想提取这些行,并将每个行分解为单独的部分,每个部分都有一个数据值。我想得到一个列表resultList,它最终会打印出以下内容:

> head(resultList)`
[[1]]`  
[1] ""   "txt01"    "100"       "200"     "123.456"        "0.12345" 
[[2]]`  
[1] ""   "txt02"    "300"       "400"     "789.012"        "0.06789"

我正在为strsplit()表示法而挣扎,到目前为止,我已经尝试并获得了以下代码:

resultList  <- strsplit(sampleVector,"\s+[|] | [|]\s+ | [\s+]")`          
#would give me the following output`
# [[1]]`    
# [1] "| txt01"    "100"       "200"     "123.456"        "0.12345 |" 

无论如何,我可以通过一个strsplit调用获得输出?我猜我用来区分分隔符+空白的符号是错误的。这方面的任何帮助都是好的。

我差点错过的另一个strsplit选项:

strsplit(test,"[| ]+")
#[[1]]
#[1] ""        "txt01"   "100"     "200"     "123.456" "0.12345"
# 
#[[2]]
#[1] ""        "txt02"   "300"     "400"     "789.012" "0.06789"

我最初的答案是因为regmatches是我最近最喜欢的功能:

regmatches(test,gregexpr("[^| ]+",test))
#[[1]]
#[1] "txt01"   "100"     "200"     "123.456" "0.12345"
#
#[[2]]
#[1] "txt02"   "300"     "400"     "789.012" "0.06789"

按要求分解:

[| ]+是搜索空间的单个或重复实例+的正则表达式nbsp;或管道[^| ]+
+是一个正则表达式,用于搜索任何字符的单个或重复实例^,而不是|空格nbsp;或管道regmatches
CCD_ 15查找该模式的所有实例,并返回匹配模式的起始位置和长度
CCD_ 16从CCD_ 17中提取CCD_ 18 匹配的所有模式

这里有一种方法。这首先从具有scan的向量中移除strsplit。然后它在空间(或任意数量的空间)上使用CCD_21。这样可能容易一点。

strsplit(gsub("|", "", sampleVector, fixed=TRUE), "\s+")
# [[1]]
# [1] ""        "txt01"   "100"     "200"     "123.456" "0.12345"
#
# [[2]]
# [1] ""        "txt02"   "300"     "400"     "789.012" "0.06789"

这里有一个使用CCD_22的有趣的替代方案,它可能很有用,而且可能很快。

lapply(sampleVector, function(y) {
    s <- scan(text = y, what = character(), sep = "|", quiet = TRUE)
    (g <- gsub("\s+", "", s))[-length(g)]
})
# [[1]]
# [1] ""        "txt01"   "100"     "200"     "123.456" "0.12345"
#
# [[2]]
# [1] ""        "txt02"   "300"     "400"     "789.012" "0.06789"

可以先尝试strsplit和gsub:

sapply(strsplit(xx, '\|'), function (x) gsub("^\s+|\s+$", "", x))
     [,1]     
[1,] ""       
[2,] "txt01"  
[3,] "100"    
[4,] "200"    
[5,] "123.456"
[6,] "0.12345"

最新更新