2017-01-12 41 views
0

我有一個具有12個觀測和3個變量R:可變的水平分割成兩個變量

df <- read.table(text = c(" 
SiteID scenario value 
site1 measured_raw21 55 
          site1 measured_raw22 60 
          site1 simulated_raw21 54 
          site1 simulated_raw22 59 
          site1 measured_adj21 23 
          site1 measured_adj22 27 
          site1 simulated_adj21 22 
          site1 simulated_adj22 28 
          site1 meaured_0.5 40 
          site1 meaured_0.8 55 
          site1 simulated_0.5 40 
          site1 simulated_0.8 57"), header =T) 

在該DF一個data.frame,我想的scenario水平分爲兩列

> df 
    SiteID  scenario value 
1 site1 measured_raw21 55 
2 site1 measured_raw22 60 
3 site1 simulated_raw21 54 
4 site1 simulated_raw22 59 
5 site1 measured_adj21 23 
6 site1 measured_adj22 27 
7 site1 simulated_adj21 22 
8 site1 simulated_adj22 28 
9 site1  meaured_0.5 40 
10 site1  meaured_0.8 55 
11 site1 simulated_0.5 40 
12 site1 simulated_0.8 57 

輸出應該是這樣的

SiteID scenario scenario1 value 
site1 measured raw21  55 
site1 measured raw22  60 
site1 simulated raw21  54 
site1 simulated raw22  59 
site1 measured adj21  23 
site1 measured adj22  27 
site1 simulated adj21  22 
site1 simulated adj22  28 
site1 meaured  0.5   40 
site1 meaured  0.8   55 
site1 simulated 0.5   40 
site1 simulated 0.8   57 

任何建議如何R中做到這一點?

回答

2

tidyr庫救援:

library(tidyr) 
df <- separate(df, col = scenario, into = c("scenario","scenario1"), sep = "_") 
+0

非常感謝奧利弗您的時間和幫助的選項。 如果關卡看起來像'simulated_raw21_nodrain'會怎麼樣?任何建議如何將其分成兩個「模擬」和「raw21_nodrain」。 – aelwan

+0

謝謝,但我的意思是隻有兩個參數 所以場景將''模擬'和scenario1將'raw21_nodrain' – aelwan

+1

嘗試'reshape2'包'colsplit'。 'colsplit(df $ scenario,「_」,c(「scenario」,「scneario1」))' –

1

下面是使用base R

cbind(df[-2], read.table(text=as.character(df$scenario), sep="_", 
     header=FALSE, col.names = c("scenario", "scenario1")))]c(1, 3, 4, 2)]