将值输入到更长的数据帧中

时间:2013-08-29 00:36:11

标签: r

我有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 

我认为当A $ Link不在B中时会触发此错误。任何解决此问题的想法? 感谢

数据框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

2 个答案:

答案 0 :(得分:3)

使用merge并按Link合并,all.x将返回x的所有行(在您的情况下为x= A)。

我只传递了A的前两列,因为您示例中的A$pY都是NA

  merge(A[,1:2],B,by='Link', all.x = TRUE)

答案 1 :(得分: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