[英]Replace values in column of a dataframe when matching to column in another dataframe in R
[英]R: moving values from a dataframe to another when there are matching values
我有兩個數據框
第一個數據幀稱為A:
A = data.frame(Col1 = c('2017Q1','2017Q1','2017Q1',
'2017Q2','2017Q2','2017Q2',
'2017Q3','2017Q3','2017Q3'),
Col2=c('800256','855625','855450',
'800256','855625','855450',
'800256','855625','855450'),
Col3=c(0.4,0.6,0.7,1.2,2.5,3.5,0.2,1.3,1.2))
數據框A:
Col1 Col2 Col3
1 2017Q1 800256 0.4
2 2017Q1 855625 0.6
3 2017Q1 855450 0.7
4 2017Q2 800256 1.2
5 2017Q2 855625 2.5
6 2017Q2 855450 3.5
7 2017Q3 800256 0.2
8 2017Q3 855625 1.3
9 2017Q3 855450 1.2
第二個數據幀稱為B:
B = data.frame(Col2=c('800256','855665','855450',
'800285','855625'),
'2017Q1'=c(0.6,1.2,3.5,0.2,1.3),
'2017Q2'=c(0.9,1.3,5.6,1.1,2.9),
'2017Q3'=c(6.5,1.2,4.7,1.1,9.8))
[!!!!]:在原始B表中,最后3列的名稱為2017Q1、2017Q2和2017Q3,但是如果您執行上面的代碼,則這些列的名稱的格式為X2017Q1,X2017Q2和X2017Q3。
同樣,數據框B包含另外2個Col2值,這些值不包含在數據框A,855665和800285中。
Col2 2017Q1 2017Q2 2017Q3
1 800256 0.6 0.9 6.5
2 855665 1.2 1.3 1.2
3 855450 3.5 5.6 4.7
4 800285 0.2 1.1 1.1
5 855625 1.3 2.9 9.8
我想做的是在數據幀A(Col4)中創建一個新列,其中將包括數據幀B中列2017Q1至2017Q3的值,僅適用於兩個表之間的匹配Col2值,因此僅適用於800256、855625和855450 。
因此表A將具有以下最終形式:
Col1 Col2 Col3 Col4
1 2017Q1 800256 0.4 0.6
2 2017Q1 855625 0.6 1.3
3 2017Q1 855450 0.7 3.5
4 2017Q2 800256 1.2 0.9
5 2017Q2 855625 2.5 2.9
6 2017Q2 855450 3.5 5.6
7 2017Q3 800256 0.2 6.5
8 2017Q3 855625 1.3 9.8
9 2017Q3 855450 1.2 4.7
有任何想法嗎?
默認情況下,R自動嘗試創建有效的列名,而數字則不是。 您可以使用data.frame
語句中的check.names=FALSE
阻止R執行此操作。
B <- data.frame(Col2=c('800256','855665','855450',
'800285','855625'),
'2017Q1'=c(0.6,1.2,3.5,0.2,1.3),
'2017Q2'=c(0.9,1.3,5.6,1.1,2.9),
'2017Q3'=c(6.5,1.2,4.7,1.1,9.8), check.names=FALSE)
require(reshape2)
B2 <- melt(B, id="Col2")
然后merge
年/季度和Col2等於的地方
df1 <- merge(A,B2, by.x=c("Col1", "Col2"),by.y=c("variable","Col2"),all.x=TRUE)
names(df1) <- c("Col1", "Col2", "Col3", "Col4")
Col1 Col2 Col3 Col4
1 2017Q1 800256 0.4 0.6
2 2017Q1 855450 0.7 3.5
3 2017Q1 855625 0.6 1.3
4 2017Q2 800256 1.2 0.9
5 2017Q2 855450 3.5 5.6
6 2017Q2 855625 2.5 2.9
7 2017Q3 800256 0.2 6.5
8 2017Q3 855450 1.2 4.7
9 2017Q3 855625 1.3 9.8
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.