[英]Adding column to a dataframe in R based on matching conditions in another dataframe
[英]Replace Dataframe column with another dataframe based on conditions - R
我遇到了一些麻煩,也許這里有人可以幫助我!
我有一個包含三列(ID1、ID2 和 VALUE1)的數據框。 此外,我還有另一個數據框,它遵循相同的配置,但某些 ID1 和 ID2 具有另一個值。 我正在嘗試僅基於多個條件將 dataframe1 中 VALUE1 列上的值替換為 dataframe2 中 VALUE1 列中的值。 這意味着,當 ID1 和 ID2 滿足某些條件“x”和“y”時,則替換數據幀 2 中的這些值。
下面我附上一個例子。 想法是使用 df1,當 ID1=5 且 ID2<100 時,從 df2 替換 VALUE1 的值。 df3 是預期結果(請注意,我想保留 df1 中的所有列,僅在條件滿足時替換值)
例子:
df1 <- data.frame(ID1=c(1,2,3,4,5,5,5,4,3,5),
ID2 = c(10,20,30,40,50,150,200,99,10,25),
VALUE1 = c(100,200,300,400,200, 100,200,40,150,70),
NAME = c("Juan", "Rodrigo","Pedro","Lucas","d", "e","f","g","x","a"),
SURNAME = c("perez","jones","bla","lopez","martinez","rodriguez","jerez","dieguez","gimenez","mendez"))
df2 <- data.frame(ID1=c(5,5,5,5),
ID2 = c(50,150,200,25),
VALUE1 = c(40,30,180,200))
df3 <- data.frame(ID1=c(1,2,3,4,5,5,5,4,3,5),
ID2 = c(10,20,30,40,50,150,200,99,10,25),
VALUE1 = c(100,200,300,400,50, 100,200,40,150,200),
NAME = c("Juan", "Rodrigo","Pedro","Lucas","d", "e","f","g","x","a"),
SURNAME = c("perez","jones","bla","lopez","martinez","rodriguez","jerez","dieguez","gimenez","mendez"))
我嘗試了一些諸如合並、if、ifelse 之類的事情,但我沒有達到結果。 我想知道是否有人可以幫助我!
提前致謝!
我認為您可以使用以下解決方案:
library(dplyr)
df1 %>%
left_join(df2, by = c("ID1", "ID2")) %>%
mutate(VALUE1.x = ifelse(ID1 == 5 & ID2 < 100, VALUE1.y, VALUE1.x)) %>%
select(-VALUE1.y) %>%
rename_with(~ sub("\\.x", "", .), contains(".x"))
ID1 ID2 VALUE1 NAME SURNAME
1 1 10 100 Juan perez
2 2 20 200 Rodrigo jones
3 3 30 300 Pedro bla
4 4 40 400 Lucas lopez
5 5 50 40 d martinez
6 5 150 100 e rodriguez
7 5 200 200 f jerez
8 4 99 40 g dieguez
9 3 10 150 x gimenez
10 5 25 200 a mendez
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.