2013-12-13 32 views
5

R'de yeni başlayan biriyim ve aşağıdaki sorun için bir çözüm bulamıyorum. Herhangi bir yardım gerçekten takdir edilecektir!Veri çerçevesindeki değerleri bir kurala göre diğer değerlerle değiştirin

Bir data.frame'ım var ve bir sütunun belirli değerlerini tanımlanmış diğer değerlerle değiştirmek istiyorum.

data.frame

date<-c("19921231","19931231","19941231","19941231","19931231","19941231") 
variable<-c("a","a","a","b","b","b") 
value<-c(1:6) 
dataframe <- data.frame(date,variable,value) 

girişim sorun, bir matris değildir, belli bir sorunu

yearend<-c("19921231","19931231","19941231") 
year<-c("1992","1993","1994") 
map = setNames(yearend,year) 
dataframe[] = map[dataframe] 

hata iletisi

Error in map[dataframe] : invalid subscript type 'list' 

çözmek için. Bu sorunu çözmenin en etkili yolu nedir? "Gerçek" karakteri değiştirmek istersem de işe yarayabilir. "BASF hisse senedi" ile "BGSFDS".

cevap

8

Güzel fonksiyon plyr paketinden mapvalues() geçerli:

require(plyr) 
dataframe$newdate <- mapvalues(dataframe$date, 
      from=c("19921231","19931231","19941231"), 
      to=c("1992","1993","1994")) 
+0

Çok güzel bir çözüm, çok teşekkürler! – user3076270

2

birleştirme() da yardımcı olabilir.

yearend<-c("19921231","19931231","19941231") 
year<-c("1992","1993","1994") 
map = data.frame(yearend,year) 

merge(dataframe,map,by.x='date',by.y='yearend') 
0

Sen match kullanabilirsiniz:

dataframe <- transform(dataframe, Year = year[match(date, yearend)]) 

     date variable value Year 
1 19921231  a  1 1992 
2 19931231  a  2 1993 
3 19941231  a  3 1994 
4 19941231  b  4 1994 
5 19931231  b  5 1993 
6 19941231  b  6 1994 
1

Eğer tarihten itibaren bir yıl ayıklamak istediğinizde, aşağıdaki kod satırı ile bunu yapabilirsiniz:

dataframe$year <- substr(dataframe$date,1,4) 

seni yeni değişkeni bir sınıfa simülatif olarak atamak istersiniz:

dataframe$year <- as.integer(substr(dataframe$date,1,4))