使用特定条件在R中拆分字符串

时间:2019-10-09 17:07:30

标签: r regex string stringr

我有这个字符向量,我需要在每一行中拆分元素。

这是数据集的图像和代码:

Y = c("Voci dell’attivo 31-dic-2018 31-dic-2017", "10. Cassa e disponibilità liquide 113.154.047 105.800.459", 
"20. Attività finanziarie valutate al fair value con impatto a conto economico 18.400.808 16.926.126", 
"a) attività finanziarie detenute per la negoziazione 4.343.408 4.356.151", 
"c) altre attività finanziarie obbligatoriamente valutate al fair value 14.057.400 12.569.975", 
"30. Attività finanziarie valutate al fair value con impatto sulla redditività complessiva 636.155.429 738.384.151", 
"40. Attività finanziarie valutate al costo ammortizzato 11.203.834.137 11.113.118.111", 
"a) crediti verso banche 3.198.599.841 3.375.218.889", "b) crediti verso clientela 8.005.234.296 7.737.899.222", 
"50. Derivati di copertura 516.238 696.134", "70. Partecipazioni 183.546.796 156.038.259", 
"80. Attività materiali 224.588.110 237.315.814", "90. Attività immateriali 1.917.192 2.041.953", 
"di cui:", "- avviamento 1.650.000 1.650.000", "100. Attività fiscali 222.227.750 175.106.461", 
"a) correnti 4.897.477 10.066.708", "b) anticipate 217.330.273 165.039.753", 
"120. Altre attività 82.551.535 110.120.187", "Totale dell'attivo 12.686.892.042 12.655.547.655", 
"(unità di euro)", "Voci del passivo e del patrimonio netto", 
"31-dic-2018 31-dic-2017", "10. Passività finanziarie valutate al costo ammortizzato 11.375.985.022 11.176.338.096", 
"a) debiti verso banche 146.551.210 144.854.107", "b) debiti verso clientela 10.861.850.231 10.251.703.644", 
"c) titoli in circolazione 367.583.581 779.780.345", "20. Passività finanziarie di negoziazione 2.392.620 2.370.319", 
"40. Derivati di copertura 6.189.059 2.971.997", "60. Passività fiscali 4.091.701 3.909.554", 
"a) correnti 752.147 -", "b) differite 3.339.554 3.909.554", 
"80. Altre passività 239.940.794 152.157.192", "90. Trattamento di fine rapporto del personale 54.720.108 56.331.622", 
"100. Fondi per rischi e oneri: 66.580.390 69.699.078", "a) impegni e garanzie rilasciate 12.705.663 9.475.181", 
"c) altri fondi per rischi e oneri 53.874.727 60.223.897", "110. Riserve da valutazione 119.988.702 139.381.644", 
"140. Riserve 460.527.397 761.938.256", "150. Sovrapprezzi di emissione 126.318.353 126.318.353", 
"160. Capitale 155.247.762 155.247.762", "180. Utile (perdita) d’esercizio (+/-) 74.910.134 8.883.782", 
"Totale del passivo e del patrimonio netto 12.686.892.042 12.655.547.655")

基本上我应该做的是:

  • 将第一个数字/括号和后面的所有单词放入一列

  • 将第一个数字放在第二列

  • 删除最后一个号码

enter image description here

我不知道如何使R识别同一字符串内的不同类型的元素。我该怎么办?

1 个答案:

答案 0 :(得分:0)

鉴于您的Y,这应该可以实现您想要的目标,或者非常接近目标:

library(tidyverse)
tibble(orig = str_remove(string = Y, pattern = " [[:digit:][:punct:]]+$")) %>% 
  transmute(col1 = str_remove(string = orig, pattern = " [[:digit:][:punct:]]+$"), 
            col2 = str_extract(string = orig, pattern = "[[:digit:][:punct:]]+$"))
#> # A tibble: 43 x 2
#>    col1                                                        col2        
#>    <chr>                                                       <chr>       
#>  1 Voci dell’attivo 31-dic-2018 31-dic-2017                    -2017       
#>  2 10. Cassa e disponibilità liquide                           113.154.047 
#>  3 20. Attività finanziarie valutate al fair value con impatt… 18.400.808  
#>  4 a) attività finanziarie detenute per la negoziazione        4.343.408   
#>  5 c) altre attività finanziarie obbligatoriamente valutate a… 14.057.400  
#>  6 30. Attività finanziarie valutate al fair value con impatt… 636.155.429 
#>  7 40. Attività finanziarie valutate al costo ammortizzato     11.203.834.…
#>  8 a) crediti verso banche                                     3.198.599.8…
#>  9 b) crediti verso clientela                                  8.005.234.2…
#> 10 50. Derivati di copertura                                   516.238     
#> # … with 33 more rows

reprex package(v0.3.0)于2019-10-09创建

要澄清一下:使用美元符号告诉正则表达式从字符串末尾开始查找匹配项,因此该代码发生的事情是,首先删除数字和点的最后一个组合,然后从其余字符串中删除,它将保留或删除数字和点以创建两列。