2013-12-13 38 views
5

Tôi là người mới bắt đầu trong R và không tìm thấy giải pháp cho vấn đề sau. Bất kỳ trợ giúp sẽ được thực sự đánh giá cao!Thay thế giá trị trong khung dữ liệu với các giá trị khác theo quy tắc

Tôi có data.frame và muốn thay thế các giá trị nhất định của một cột bằng các giá trị được xác định khác.

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) 

nỗ lực để giải quyết vấn đề

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

thông báo lỗi

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

Vấn đề là rõ ràng, rằng nó không phải là một ma trận. Cách hiệu quả nhất để giải quyết vấn đề này là gì? Nó cũng sẽ hoạt động nếu tôi muốn thay thế ký tự "thực", ví dụ: "BGSFDS" với "CP BASF".

Trả lời

8

Một chức năng tốt đẹp là mapvalues() từ gói plyr:

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

Giải pháp rất đẹp, cảm ơn rất nhiều! – user3076270

2

merge() cũng có thể giúp đỡ.

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

Bạn có thể sử dụng 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

Khi bạn muốn trích xuất năm kể từ ngày, bạn có thể làm điều này với các dòng mã sau đây:

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

Khi bạn muốn chỉ định một lớp cho biến mới simulataniously:

dataframe$year <- as.integer(substr(dataframe$date,1,4)) 
Các vấn đề liên quan