2014-10-09 101 views
0

我有两个不同的数据集,A和B,它们的长度不同,我需要从B到A的末尾添加一列,如果日期匹配。下面是数据组B的样子:for循环来匹配列

Variable_1 Variable_2  Date   Variable_3 
v1    v2   10/12/2014  0 
v1a   v2a   10/11/2014  18 
v1b   v2b   10/10/2014  15 
v1c   v2c   10/08/2014  0 
v1d   v2d   10/09/2014  0 
v1e   v2e   10/01/2014  0 

答:

Date    Variable_4   Variable_5 Variable_0 
10/11/2014   v4    v5   N 
10/12/2014   v4a    v5a   N 
10/08/2014   v4b    v5b   N 
10/09/2014   v4c    v5c   N 
10/25/2014   v4d    v5d   N 
10/31/2014   v4e    v5e   N 

所以我需要一个循环,如果说在日期中的A相同B日期再加入variable_3的为DataSet A.

所以循环结束后,它应该看起来像:

Date    Variable_4   Variable_5  Variable_0 
10/11/2014   v4    v5    18 
10/12/2014   v4a    v5a    0 
10/08/2014   v4b    v5b    0 
10/09/2014   v4c    v5c    0 
10/25/2014   v4d    v5d    N 
10/31/2014   v4e    v5e    N 

目前我有这个循环,但它似乎没有要工作?

lgthWeather <- length(Park$PRCP) 
    lgthData <- length(Data$Date) 
    count <- 0 


    #### broken loop ### 

for(i in 1:lgthWeather) 
{ 
    for(j in 1:lgthData) 
    { 
    if(Data$Date[j] == Park$Date[i]) 
    { 
     Data$Precip[j] <- Park$PRCP[i] 
     j <- j + 1 
    } 
    if(Data$Date[j] != Park$PRCP[i]) 
    { 
     j <- j + 1 
    } 
    } 
i <- i + 1 
} 

任何意见将不胜感激。

解决方案下图:

merge(A, B[,c("Date","Variable_3")], by="Date", all.x=TRUE) 

    Date Variable_4 Variable_5 Variable_0 Variable_3 
    1 10/08/2014  v4b  v5b   N   0 
    2 10/09/2014  v4c  v5c   N   0 
    3 10/11/2014   v4   v5   N   18 
    4 10/12/2014  v4a  v5a   N   0 
    5 10/25/2014  v4d  v5d   N   NA 
    6 10/31/2014  v4e  v5e   N   NA 
+0

或者你可以使用'left_join(A,B [C( “日期”, “variable_3的”)],通过= '日期')'从'库(dplyr)' – akrun 2014-10-09 16:10:52

+1

代替添加“解决'你的头衔,为什么你不接受提供的答案之一? – 2014-10-09 16:50:06

回答

2

看起来merge会做你要找的内容:

merge(A, B[,c("Date","Variable_3")], by="Date", all.x=TRUE) 

     Date Variable_4 Variable_5 Variable_0 Variable_3 
1 10/08/2014  v4b  v5b   N   0 
2 10/09/2014  v4c  v5c   N   0 
3 10/11/2014   v4   v5   N   18 
4 10/12/2014  v4a  v5a   N   0 
5 10/25/2014  v4d  v5d   N   NA 
6 10/31/2014  v4e  v5e   N   NA 
+0

我收到错误:fix.by(by.y,y)中的错误:'by'必须指定一个唯一有效的列。我的两个日期变量的类型都是“整数” – user2679225 2014-10-09 16:14:35

+0

看起来您正在指定一个在名称为“合并”的第二个数据框中不存在的列名称。请发布您运行的实际代码。 – eipi10 2014-10-09 16:16:18

+0

非常感谢! – user2679225 2014-10-09 16:19:46

2

由于您的日期是唯一的,你可以使用一个矢量子集match

A$Variable_3 <- B$Variable_3[match(A$Date, B$Date)] 
A[order(A$Date),] 
#   Date Variable_4 Variable_5 Variable_0 Variable_3 
# 3 10/08/2014  v4b  v5b   N   0 
# 4 10/09/2014  v4c  v5c   N   0 
# 1 10/11/2014   v4   v5   N   18 
# 2 10/12/2014  v4a  v5a   N   0 
# 5 10/25/2014  v4d  v5d   N   NA 
# 6 10/31/2014  v4e  v5e   N   NA