2013-12-13 73 views
5

我是R中的初學者,無法找到針對以下問題的解決方案。任何幫助將非常感激!根據規則將數據框中的值替換爲其他值

我有一個data.frame,並希望用定義的其他值替換列的某些值。

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) 

試圖解決問題

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

錯誤消息

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

的問題是很明顯,這不是一個矩陣。什麼是解決這個問題最有效的方法?如果我想替換「真實」的字符,它也應該工作,例如「BGSFDS」與「巴斯夫股票」。

回答

8

一個很好的功能是從plyr包mapvalues()

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

非常好的解決方案,非常感謝! – user3076270

2

合併()也可能會有所幫助。

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

您可以使用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

當你想從日期中提取年,你可以用下面的代碼行做到這一點:

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

當你希望同樣地爲新變量指定一個類:

dataframe$year <- as.integer(substr(dataframe$date,1,4)) 
相關問題