2014-10-09 122 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