Tôi có một khung dữ liệu hiện có lớn hơn nhiều. Đối với ví dụ nhỏ hơn này tôi muốn thay thế một số biến (thay thế trạng thái (df1)) bằng newstate (df2) theo cột "đầu tiên". Vấn đề của tôi là các giá trị được trả về là NA vì chỉ một số tên được khớp trong dataframe mới (df2).Có giá trị trả về danh nghĩa khi đang sử dụng chức năng đối sánh trong R
hiện dataframe:
state = c("CA","WA","OR","AZ")
first = c("Jim","Mick","Paul","Ron")
df1 <- data.frame(first, state)
first state
1 Jim CA
2 Mick WA
3 Paul OR
4 Ron AZ
New dataframe để phù hợp với dataframe hiện
state = c("CA","WA")
newstate = c("TX", "LA")
first =c("Jim","Mick")
df2 <- data.frame(first, state, newstate)
first state newstate
1 Jim CA TX
2 Mick WA LA
Cố gắng sử dụng trận đấu nhưng trả NA cho "nhà nước", nơi một phù hợp với "đầu tiên" biến từ df2 không phải là được tìm thấy trong khung dữ liệu gốc.
df1$state <- df2$newstate[match(df1$first, df2$first)]
first state
1 Jim TX
2 Mick LA
3 Paul <NA>
4 Ron <NA>
Có cách nào bỏ qua nomatch hoặc có nomatch trả về biến hiện tại không? Đây sẽ là ví dụ về kết quả mong muốn: Trạng thái của Jim/Mick được cập nhật trong khi trạng thái của Paul và Ron không thay đổi.
first state
1 Jim TX
2 Mick LA
3 Paul OR
4 Ron AZ
Mã của bạn hoạt động. [Cảm ơn bạn.] Nhưng bạn có thể giải thích tại sao bạn có' indx! = 0' ở bên trái của dấu bằng và 'indx' trên phía bên phải của bằng? 'df1 $ state [indx! = 0] <- df2 $ newstate [indx]' –