如何以反斜杠分割字符串" \"在R?

时间:2016-03-08 21:59:02

标签: r split backslash strsplit

我正在尝试处理使用" \"的CSV输出文件。在几乎所有的列标题中。列标题的一个例子是:

"RiverName 0 \ site 1", "RiverName 1 \ site 2", "RiverName 2 \ site 3"

我尝试将河流位置与站点编号分开,并将这些值放入表中,遵循以下格式:

river          site
RiverName 0    site 1
RiverName 1    site 2
RiverName 2    site 3

我找到了一些关于拆分" \"的相关回复。我还没有解决我的问题,但是one solutionthe other可能无效,因为我试图将每列中的字符串拆分为两个字符串/两列。

最终目标是能够识别哪个" RiverName#有多个网站#"并使用该列表选择数据列从完整的数据表。每组"网站#"属于同一个" RiverName#\ ..."将在所有行中拥有它们的值。单个" RiverName#"的最大数量"网站#" s应该是2,但我处理的是1000多列数据,其中一些网站根据模型运行报告。

一小部分实际数据如下所示:

Streamflow (below node or reach listed)                                         
Scenario: test_1986  All Rivers (75)     All months (12)                                    
$Unit = Cubic Meter                                         
$ListSeparator = ,                                          
$DecimalSymbol = .                                          
$Columns = Year  Timestep    "AmericanFork   0 \ Headflow[Cubic Meter]"  "AmericanFork   1 \ Catchment Inflow Node 96[Cubic Meter]"  "AmericanFork   2 \ Reach[Cubic Meter]"     "AmericanFork   3 \ AmericanFk AB UpperPower 10164500 (gauge)[Cubic Meter]"     "AmericanFork   3 \ Catchment Inflow Node 97[Cubic Meter]"  "AmericanFork   4 \ Reach[Cubic Meter]"     "AmericanFork   5 \ Catchment Inflow Node 391[Cubic Meter]"     "AmericanFork   6 \ Reach[Cubic Meter]"     "AmericanFork   7 \ Catchment Inflow Node 23[Cubic Meter]"  "AmericanFork   8 \ Reach[Cubic Meter]"
1985    1   0   233162  233162  59529600    396115  396115  466798  466798  822034  822034
1985    2   0   224064  224064  46915200    380629  380629  448538  448538  789499  789499
1985    3   0   215528  215528  68860800    366083  366083  460029  460029  3082519 3082519
1985    4   0   479387  479387  240883200   1186144 1186144 1732742 1732742 9214172 9214172
1985    5   0   1129770 1129770 568857600   2394140 2394140 2573311 2573311 3957801 3957801
1985    6   0   560258  560258  457142400   1046736 1046736 1225671 1225671 2936521 2936521
1985    7   0   403568  403568  205804800   742211  742211  844912  844912  2336802 2336802
1985    8   0   286687  286687  118886400   509035  509035  593644  593644  1204795 1204795
1985    9   0   294099  294099  79228800    543535  543535  643345  643345  1489512 1489512
1985    10  0   456219  456219  88646400    1057770 1057770 1287924 1287924 4032124 4032124
1985    11  0   264292  264292  68256000    509662  509662  592545  592545  2725935 2725935
1985    12  0   251136  251136  66873600    472174  472174  550178  550178  934797  934797

在将整个CSV文件读入R后读取列名行会产生一行数据帧,但每列有252个级别(原始数据帧中从中提取单行的总行数) 。)而是,我使用以下代码只读取包含CSV列名称的行。

> ras <- read.table(filename, header = FALSE, sep = ",", skip = 5, nrow = 1)

输出(ras)如下所示:

 V1        V2                                         V3
1 $Columns = Year  Timestep  AmericanFork   0 \\ Headflow[Cubic Meter]
                                                          V4
1  AmericanFork   1 \\ Catchment Inflow Node 96[Cubic Meter]
                                       V5
1  AmericanFork   2 \\ Reach[Cubic Meter]
                                                                           V6
1  AmericanFork   3 \\ AmericanFk AB UpperPower 10164500 (gauge)[Cubic Meter]
                                                          V7
1  AmericanFork   3 \\ Catchment Inflow Node 97[Cubic Meter]
                                       V8
1  AmericanFork   4 \\ Reach[Cubic Meter]
                                                           V9
1  AmericanFork   5 \\ Catchment Inflow Node 391[Cubic Meter]
                                      V10
1  AmericanFork   6 \\ Reach[Cubic Meter]
                                                         V11
1  AmericanFork   7 \\ Catchment Inflow Node 23[Cubic Meter]
                                      V12
1  AmericanFork   8 \\ Reach[Cubic Meter]

我删除了前两个值(原始CSV中的行标签),然后删除了值的名称,以尝试简化我要拆分的数据。

ras2 <- ras[ ,-c(1,2)] 
ras3 <- unlist(c(wnr2), use.names = FALSE)

输出(ras3)现在看起来像这样:

[1]  AmericanFork   0 \\ Headflow[Cubic Meter]                                 
 [2]  AmericanFork   1 \\ Catchment Inflow Node 96[Cubic Meter]                 
 [3]  AmericanFork   2 \\ Reach[Cubic Meter]                                    
 [4]  AmericanFork   3 \\ AmericanFk AB UpperPower 10164500 (gauge)[Cubic Meter]
 [5]  AmericanFork   3 \\ Catchment Inflow Node 97[Cubic Meter]                 
 [6]  AmericanFork   4 \\ Reach[Cubic Meter]                                    
 [7]  AmericanFork   5 \\ Catchment Inflow Node 391[Cubic Meter]                
 [8]  AmericanFork   6 \\ Reach[Cubic Meter]                                    
 [9]  AmericanFork   7 \\ Catchment Inflow Node 23[Cubic Meter]                 
[10]  AmericanFork   8 \\ Reach[Cubic Meter]                                    
10 Levels:  AmericanFork   0 \\ Headflow[Cubic Meter] ...

&#34; AmericanFork 3&#34;是一个例子&#34; RiverName#&#34;有一对网站(&#34; AmericanFk AB UpperPower 10164500(规格)[Cubic Meter]&#34;&#34; Catchment Inflow Node 97 [Cubic Meter]&#34;)我想从中提取用于比较的完整CSV。

0 个答案:

没有答案