使用2分公共列替換與DF1真值DF2錯誤的價值觀我有這樣由R中
TEAM <- c("PE","PE","MPI","TDT","HPT")
EmpID <- c (444452,444456,16822,339862,14828)
ManagerID <- c(11499,11599,11899,11339,11559)
CODE <- c("F",NA,"A","H","G")
df1 <- data.frame(TEAM,EmpID,ManagerID,CODE)
TEAM <- c("MPI","TDT","HPT","PE","TDT","PE","MPI","TDT","HPT","PE")
EmpID <- c(444452,444452,444452,339862,339862,16822,339862,16822,14828,14828)
ManagerID <- c(11499,11499,11499,11339,11339,11899,11339,11899,11559,11559)
CODE <- c("A234","H665","G654","F616","H626","F234","H695","G954","G616",NA)
df2 <- data.frame(TEAM,EmpID,ManagerID,CODE)
我試圖與更新DF2經理ID &的EmpID的錯誤值2個的數據幀只有當TEAM & CODE(在df1的CODE列中的字母與在df2中的CODE列的第一個字母相匹配)時,ManagerID爲& EmpID的真實值纔在df1中。如果團隊匹配但代碼不正確,那麼錯誤的值將保留並且不應該用來自df1的值替換。
我期望的輸出是
TEAM EmpID ManagerID CODE
1 MPI 16822 11899 A234
2 TDT 339862 11339 H665
3 HPT 14828 11559 G654
4 PE 444452 11499 F616
5 TDT 339862 11339 H626
6 PE 444452 11499 F234
7 MPI 339862 11339 H695
8 TDT 16822 11899 G954
9 HPT 14828 11559 G616
10 PE 444452 11599 <NA>
你可以看到,該行7 & 8保持不變,因爲代碼不匹配。
我試圖這樣做是爲了我的previous question
df2$ManagerID = df1$ManagerID[match(substr(df2$CODE, 1, 1), df1$CODE)]
df2$EmpID = df1$EmpID [match(substr(df2$CODE, 1, 1), df1$CODE)]
這樣從格雷戈爾的幫助,我不知道如果我在正確的方向我領導。請幫助我瞭解如何有效地解決這個問題。
編輯:-)謝謝弗蘭克 – Sharath
我對你想要的輸出有點困惑。 'df1'中的'CODE'列應該使得'df2'中只有一行被改變('CODE'中''的那一行)。如果其他行沒有匹配的'CODE',其他行如何更改? –
Warner
我在那裏提到df1中CODE中的字母應該與df2中CODE中的第一個字母相匹配。 – Sharath