2013-12-13 10 views
5

Ich bin ein Anfänger in R und finde keine Lösung für das folgende Problem. Jede Hilfe würde wirklich geschätzt werden!Ersetzen Sie die Werte im Datenrahmen durch andere Werte gemäß einer Regel

Ich habe ein data.frame und möchte bestimmte Werte einer Spalte mit definierten anderen Werten ersetzen.

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) 

Versuch Problem

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

Fehlermeldung

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

Das Problem ist offensichtlich zu lösen, dass es nicht eine Matrix ist. Was ist der effizienteste Weg, um dieses Problem zu lösen? Es sollte auch funktionieren, wenn ich "echtes" Zeichen, z. "BGSFDS" mit "BASF-Vorrat".

Antwort

8

Eine nette Funktion ist mapvalues() vom plyr Paket:

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

Sehr schöne Lösung, vielen Dank! – user3076270

2

merge() auch von Hilfe sein könnte.

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

können Sie verwenden 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

Wenn Sie das Jahr ab dem Datum extrahieren möchten, können Sie dies von Code mit der folgenden Zeile tun:

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

Wenn Sie möchte der neuen Variablen simultan eine Klasse zuweisen:

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