4

假设我有两个矩阵 A 和 B:

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)) 

基本上我需要的是用B中的列年份更改A中的第m列,也许我没有搜索正确的关键字,我无法得到我想要的(我试过which()),请帮忙,谢谢你。

4

2 回答 2

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
于 2012-10-15T02:19:54.630 回答
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像这样使用来替换 mth :

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列来索引AB然后抓取第一列。+

于 2012-10-15T02:23:13.257 回答