0

我有 2 个具有不同行数的数据框(A 有 55,B 有 41)。我想从数据框 B 中获取 Py 值并将它们放入对应于“链接”的 A$Py 中。

我试过了

link.list <- A$Link
for(i in 1:length(link.list)){
  A$Py[i] <- B[which(B$Link==link.list[i]), "Py"]
}     

但是得到:

Error in A$Py[i] <- B[which(B$Link == link.list[i]), "Py"] : 
replacement has length zero 

我假设当 B 中没有 A$Link 时会触发此错误。有解决此问题的想法吗?谢谢

数据框A:

    Link    VU  Py
1   DVH1-1  1   NA
2   DVH1-10 9   NA
3   DVH1-2  1   NA
4   DVH1-3  1   NA
5   DVH1-4  9   NA
6   DVH1-5  9   NA
7   DVH1-6  1   NA
8   DVH1-7  1   NA
9   DVH1-8  10  NA
10  DVH1-9  10  NA
11  DVH2-1  2   NA
12  DVH2-2  1   NA
13  DVH2-3  9   NA
14  DVH2-4  9   NA
15  DVH2-5  10  NA
16  DVH2-6  9   NA
17  DVH2-7  4   NA
18  DVH2-8  9   NA
19  DVH3-1  1   NA
20  DVH3-2  12  NA
21  DVH3-3  12  NA
22  DWH1-1  4   NA
23  DWH1-10 8   NA
24  DWH1-2  4   NA
25  DWH1-3  4   NA
26  DWH1-4  8   NA
27  DWH1-5  8   NA
28  DWH1-6  4   NA
29  DWH1-7  4   NA
30  DWH1-8  9   NA
31  DWH1-9  9   NA
32  DWH2-1  4   NA
33  DWH2-2  4   NA
34  DWH2-3  8   NA
35  DWH2-4  8   NA
36  DWH2-5  8   NA
37  DWH2-6  8   NA
38  DWH2-7  7   NA
39  DWH2-8  5   NA
40  DWH3-1  3   NA
41  DWH3-2  49  NA
42  DWH3-3  0   NA
43  MH1-1   0   NA
44  MH1-2   1   NA
45  MH1-3   1   NA
46  MH1-4   1   NA
47  MH1-5   1   NA
48  UH1-1   17  NA
49  UH1-2   17  NA
50  UH1-3   17  NA
51  UH1-4   19  NA
52  UH2-1   4   NA
53  UH2-2   15  NA
54  UH3-1   24  NA
55  UH3-2   25  NA

数据框 B:

    Link    Py
1   DVH1-1  0
2   DVH1-10 4
3   DVH1-2  0
4   DVH1-3  14
5   DVH1-4  0
6   DVH1-5  2
7   DVH1-6  12
8   DVH1-7  11
9   DVH1-8  9
10  DVH1-9  9
11  DVH2-1  0
12  DVH2-2  14
13  DVH2-3  3
14  DVH2-4  0
15  DVH2-5  10
16  DVH2-6  0
17  DVH2-7  2
18  DVH2-8  4
19  DVH3-1  16
20  DVH3-3  8
21  DWH1-1  6
22  DWH1-10 2
23  DWH1-2  0
24  DWH1-3  7
25  DWH1-5  0
26  DWH1-6  12
27  DWH1-7  10
28  DWH1-8  0
29  DWH1-9  3
30  DWH2-1  0
31  DWH2-2  10
32  DWH2-7  0
33  DWH2-8  9
34  DWH3-1  0
35  DWH3-2  0
36  MH1-1   0
37  UH1-3   6
38  UH1-4   4
39  UH2-1   0
40  UH2-2   9
41  UH3-2   4
4

2 回答 2

3

使用merge和合并Linkall.x将返回x(在您的情况下x= A)的所有行。

我只通过了前两列A,因为A$pY在你的例子中都是 NA

  merge(A[,1:2],B,by='Link', all.x = TRUE)
于 2013-08-29T00:41:09.703 回答
0
> head(a)
  X    Link VU Py
1 1  DVH1-1  1 NA
2 2 DVH1-10  9 NA
3 3  DVH1-2  1 NA
4 4  DVH1-3  1 NA
5 5  DVH1-4  9 NA
6 6  DVH1-5  9 NA

> head(b)
  X    Link Py
1 1  DVH1-1  0
2 2 DVH1-10  4
3 3  DVH1-2  0
4 4  DVH1-3 14
5 5  DVH1-4  0
6 6  DVH1-5  2


a[a$Link %in% b$Link,5]<-b[a$Link %in% b$Link,3]
names(a)[5]<-"Py1"
> head(a)
  X    Link VU Py Py1
1 1  DVH1-1  1 NA   0
2 2 DVH1-10  9 NA   4
3 3  DVH1-2  1 NA   0
4 4  DVH1-3  1 NA  14
5 5  DVH1-4  9 NA   0
6 6  DVH1-5  9 NA   2
于 2013-08-29T00:52:11.610 回答