2012-10-15 62 views
4

說我有兩個矩陣A和B:[R配對列索引

mth <- c(rep(1:5,2)) 
day <- c(rep(10,5),rep(11,5)) 
hr <- c(3,4,5,6,7,3,4,5,6,7) 
v <- c(3,4,5,4,3,3,4,5,4,3) 
A <- data.frame(cbind(mth,day,hr,v)) 

year <- c(2008:2012) 
mth <- c(1:5) 
B <- data.frame(cbind(year,mth)) 

我想應該是這樣的:

mth <- c(rep(2008:2012,2)) 
day <- c(rep(10,5),rep(11,5)) 
hr <- c(3,4,5,6,7,3,4,5,6,7) 
v <- c(3,4,5,4,3,3,4,5,4,3) 
A <- data.frame(cbind(mth,day,hr,v)) 

基本上我需要的是改變列第m箇中A在B列的年份,也許我沒有搜索正確的關鍵字,我無法得到我想要的(我試過哪個()),請幫助,謝謝。

+0

也許這只是我,但它根本不清楚你想要什麼。 '''''''在'B'中用'year'改變'A'中的第m列是什麼意思? – mnel

回答

3
A2 <- merge(A,B, by = "mth")[ , -1] 
names(A2)[(which(names(A2)=="year"))] <- "mth" 
> A2 
    day hr v mth 
1 10 3 3 2008 
2 11 3 3 2008 
3 11 4 4 2009 
4 10 4 4 2009 
5 11 5 5 2010 
6 10 5 5 2010 
7 11 6 4 2011 
8 10 6 4 2011 
9 10 7 3 2012 
10 11 7 3 2012 
+0

謝謝,這正是我想要的。 – Rosa

3

也許最簡單的解決方法是使用merge,這相當於一個SQL加入了很多辦法:

merge(A,B) 
#----- 
merge(A, B) 
    mth day hr v year 
1 1 10 3 3 2008 
2 1 11 3 3 2008 
3 2 11 4 4 2009 
4 2 10 4 4 2009 
5 3 11 5 5 2010 
6 3 10 5 5 2010 
7 4 11 6 4 2011 
8 4 10 6 4 2011 
9 5 10 7 3 2012 
10 5 11 7 3 2012 

你也很可能使用match像這樣的地方,以取代第m:

A$mth <- B[match(A$mth, B$mth),1] 
#----- 
    mth day hr v 
1 2008 10 3 3 
2 2009 10 4 4 
3 2010 10 5 5 
4 2011 10 6 4 
5 2012 10 7 3 
6 2008 11 3 3 
7 2009 11 4 4 
8 2010 11 5 5 
9 2011 11 6 4 
10 2012 11 7 3 

雖然有點緻密的,該代碼索引B由兩個mth列從匹配和B,然後抓住第一列+

+0

謝謝,兩人工作得很好 – Rosa