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)包括所有需要的日期.因此,数据帧具有不同的长度.
问题:
数据框是:
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)
谢谢你的帮助.
有了这种问题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)