我正在尝试处理使用" \"的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 solution或the 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。