R:具有重复值的循环

0 r while-loop

我正在尝试编写一个循环来搜索data.frame B(date_B[j])中的正确日期,并将相关值复制到与同一日期相关X_B[j]X_A[i]变量中date_A[i].

挑战在于:a)目标data.frame A具有几个相同的日期,但b)不系统地具有data.frame(B)具有的所有日期.(B)包括所有需要的日期.因此,数据帧具有不同的长度.

问题:

  1. 为什么以下循环不起作用,但不返回错误消息?
  2. 怎么解决?
  3. 在R中还有其他方法可以解决这个问题吗?

数据框是:

    A =

         date_A         X_A 
    1    2010-01-01       
    2    2010-01-02
    3    2010-01-03
    4    2010-01-02
    5    2010-02-03
    6    2010-01-01
    7    2010-01-02
    .
    .
    . 
    20000

    B= 

         date_B           X_B
    1    2010-01-01       7.9
    2    2010-01-02       8.5
    3    2010-01-03       2.1
    .
    .
    400
Run Code Online (Sandbox Code Playgroud)

我的目标是:

    A=

         date_A          X_A    
    1    2010-01-01      7.9 
    2    2010-01-02      8.5
    3    2010-01-03      2.1
    4    2010-01-02      8.5
    5    2010-02-03      2.1
    6    2010-01-01      7.9
    7    2010-01-02      8.5
Run Code Online (Sandbox Code Playgroud)

我编写了以下循环,但由于某种原因,它没有找到超过第一行的方式.换句话说,它不会改变其他X_A单元格的值,尽管循环不断地运行.

    i=1; j=1; 
    while (i <= nrow(A)) 
       while (j <= nrow(B)) {
          if (A$date_A[i]==B$date_B[j]) A$X_A[i] <- B$X_B[j]; 
          j <- j+1; if (j == nrow(B)) 
          i <- i+1; 
          j=1
       } 
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

42-*_*42- 7

有了这种问题merge就容易了.以你的例子我没有与第七行匹配,但也许你有一个错字.我的A数据框只有date_A列.如果要重命名X_B列,则names()<-可以轻松完成;

 merge(A, B, by.x=1, by.y=1, all.x=TRUE)
#---result---
      date_A X_B
1 2010-01-01 7.9
2 2010-01-01 7.9
3 2010-01-02 8.5
4 2010-01-02 8.5
5 2010-01-02 8.5
6 2010-01-03 2.1
7 2010-02-03  NA
Run Code Online (Sandbox Code Playgroud)