2015-05-12 43 views
-1

我对R相对较新,并试图创建一个新的变量作为家庭作业的一部分,任何帮助将不胜感激!复杂ID变量列

我有一个数据集,看起来像这样:

State agegr 
1   15-17 
1   18-20 
1   21-24 
2   15-17 
2   18-20 
2   21-24 

目前,我有状态ID列,但是要修改它,这样我有一个显示状态和年龄范围内的单个ID列,像这样:

State 
1-15 
1-18 
1-21 
2-15 
2-18 
2-21 

并且能够识别状态。

+0

了解有关http:// stackoverflow.com/questions/5963269/how-to-make-a-great- r-reproducible-example并澄清您的问题 – demonplus

+0

从R发布实际代码,而不仅仅是您对布局的印象。 –

+0

只需使用'粘贴'。如果你真的不想把“ - ”之后的部分作为“agegr”,你也可以使用一些'gsub'。 – A5C1D2H2I1M1N2O1R2T1

回答

1

使用您的数据:

df <- data.frame(State=c(1,1,1,2,2,2), agegr=c('15-17','18-20','21-24','15-17','18-20','21-24'), stringsAsFactors=F); 
df; 
## State agegr 
## 1  1 15-17 
## 2  1 18-20 
## 3  1 21-24 
## 4  2 15-17 
## 5  2 18-20 
## 6  2 21-24 

下面是使用sub()paste()的方法:

data.frame(State=paste(df$State,sub('^(\\d+).*','\\1',df$agegr),sep='-')); 
## State 
## 1 1-15 
## 2 1-18 
## 3 1-21 
## 4 2-15 
## 5 2-18 
## 6 2-21 

下面是使用strsplit()paste()的方法:

data.frame(State=paste(df$State,unlist(strsplit(df$agegr,'-'))[c(T,F)],sep='-')); 
## State 
## 1 1-15 
## 2 1-18 
## 3 1-21 
## 4 2-15 
## 5 2-18 
## 6 2-21