Thank you, this one-liner is quite R way! On Wed, Jan 21, 2026 at 1:31 PM Rui Barradas <[email protected]> wrote: > > Às 10:52 de 20/01/2026, Eric Berger escreveu: > > Here is one approach with base R, starting with your first 2 lines, > > then a 1-liner > > > > df1 = data.frame(x = 1:20, > > y = rep(letters[1:5],4), > > w = c(rep(LETTERS[1],10), rep(LETTERS[2],10)), > > z = rnorm(20), > > stringsAsFactors = FALSE) > > df2 = data.frame(x = sample(df1$x, 5)) > > > > > > df2 <- merge(df2, df1, by="x", sort=FALSE)[,c("x","z")] > > > > HTH, > > Eric > > > > > > On Tue, Jan 20, 2026 at 12:25 PM Luigi Marongiu > > <[email protected]> wrote: > >> > >> Dear all, > >> this is a basic question but I could not find a specific answer online. > >> I have a dataframe (df1) with, in particular, an identification value > >> `x` and an output value `z`. > >> I also have another dataframe (df2) that shares `x`. > >> I need to assign `z` to df2 where df1$x is equal to df2$x. > >> What would be a straightforward way of doing this? > >> I can do it, but selecting one element at a time, checking the > >> identity of the x elements, and then assigning z. There should be a > >> more R way... > >> Thank you > >> > >> > >> ``` > >> df1 = data.frame(x = 1:20, > >> y = rep(letters[1:5],4), > >> w = c(rep(LETTERS[1],10), rep(LETTERS[2],10)), > >> z = rnorm(20), > >> stringsAsFactors = FALSE) > >> df2 = data.frame(x = sample(df1$x, 5)) > >> df2$z = NA > >> for (i in df1$x) { > >> df2$z[df2$x==i] = df1[df1$x==i,]$z > >> } > >> ``` > >> > >> ______________________________________________ > >> [email protected] mailing list -- To UNSUBSCRIBE and more, see > >> https://stat.ethz.ch/mailman/listinfo/r-help > >> PLEASE do read the posting guide > >> https://www.R-project.org/posting-guide.html > >> and provide commented, minimal, self-contained, reproducible code. > > > > ______________________________________________ > > [email protected] mailing list -- To UNSUBSCRIBE and more, see > > https://stat.ethz.ch/mailman/listinfo/r-help > > PLEASE do read the posting guide > > https://www.R-project.org/posting-guide.html > > and provide commented, minimal, self-contained, reproducible code. > Hello, > > Another option is > > > i <- match(df2$x, df1$x) > df2$z <- df1$z[i] > > > or simply > > > df2$z <- df1$z[match(df2$x, df1$x)] > > > Hope this helps, > > Rui Barradas >
-- Best regards, Luigi ______________________________________________ [email protected] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide https://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.

