2013-12-13 18 views
5

Sono un principiante in R e don `t trovare una soluzione per il seguente problema. Qualsiasi aiuto sarebbe molto apprezzato!Sostituire valori in frame di dati con altri valori in base a una regola

Ho un data.frame e vogliono sostituire alcuni valori di una colonna con altri valori definiti.

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) 

tentativo di risolvere il problema

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

messaggio di errore

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

Il problema è ovviamente, che non è una matrice. Qual è il modo più efficace per risolvere questo problema? Dovrebbe funzionare anche se voglio sostituire il carattere "reale", ad es. "BGSFDS" con "stock BASF".

risposta

8

Una funzione interessante è mapvalues() dal pacchetto plyr:

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

Soluzione molto bella, grazie mille! – user3076270

2

merge() potrebbe anche essere di aiuto.

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

È possibile utilizzare match:

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

Quando si desidera estrarre l'anno a partire dalla data, si può fare questo con la seguente riga di codice:

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

Quando si vuole assegnare una classe per la nuova variabile simulataniously:

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