[英]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.