Your use of HTML email corrupted your example slightly, but I was able to
fix it. Please follow the Posting Guide and set your emails to Plain Text
mode when posting to this mailing list in the future.
Here is one way:
# you have to be careful about mucking with factors
# convert columns to factors after you have finished
# changing values in them
# start by not creating factors in the first place
df1 <- data.frame( col1 = 1:6
, col2 = c( rep( "a", 3 )
, rep( "b", 3 )
)
, col3 = c( rep( "AA", 2 )
, rep( "BB", 2 )
, rep( "CC", 2 )
)
, col4 = c( 1, 8, 6, 9, 7, 6 )
, stringsAsFactors = FALSE
)
df2 <- data.frame( col1 = c( 1, 3, 5, 6 )
, col2 = c( rep( "a", 2 )
, rep( "b", 2 )
)
, col3 = c( rep( "AA", 1 )
, rep( "EE", 1 )
, rep( "FF", 1 )
, rep( "CC", 1 )
)
, col4 = c( 1, 8, 5, 9 )
, stringsAsFactors = FALSE
)
df3 <- merge( df1, df2, by = c( "col1", "col2" ), all = TRUE )
idx <- !is.na( df3$col3.y )
df3$col3.x[ idx ] <- df3$col3.y[ idx ]
df3$col4.x[ idx ] <- df3$col4.y[ idx ]
df3$col3.y <- df3$col4.y <- NULL
names( df3 )[ 3:4 ] <- c( "col3", "col4" )
df3
On Sun, 31 Jul 2016, Marine Regis wrote:
Hello,
I have two data frames with different sizes but with the same number of columns.
df1 <- data.frame(col1 = c(1:6), col2 = c(rep("a", 3), rep("b", 3)), col3 = c(rep("AA", 2),
rep("BB", 2), rep("CC", 2)), col4=c(1,8,6,9,7,6))
df1
col1 col2 col3 col4
1 1 a AA 1
2 2 a AA 8
3 3 a BB 6
4 4 b BB 9
5 5 b CC 7
6 6 b CC 6
df2< - data.frame(col1 = c(1,3,5,6), col2 = c(rep("a", 2), rep("b", 2)), col3 = c(rep("AA", 1),
rep("EE", 1), rep("FF", 1), rep("CC", 1)), col4=c(1,8,5,9))
df2
col1 col2 col3 col4
1 1 a AA 1
2 3 a EE 8
3 5 b FF 5
4 6 b CC 9
Based on col1 and col2, how can I replace any values in col3 and col4 of df1
which don't match with those of df2 by the values of df2
In this example, the result will be:
df1
col1 col2 col3 col4
1 1 a AA 1
2 2 a AA 8
3 3 a EE 8
4 4 b BB 9
5 5 b FF 5
6 6 b CC 9
Thanks a lot for your help.
Have a nice day
Marine
[[alternative HTML version deleted]]
______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
---------------------------------------------------------------------------
Jeff Newmiller The ..... ..... Go Live...
DCN:<jdnew...@dcn.davis.ca.us> Basics: ##.#. ##.#. Live Go...
Live: OO#.. Dead: OO#.. Playing
Research Engineer (Solar/Batteries O.O#. #.O#. with
/Software/Embedded Controllers) .OO#. .OO#. rocks...1k
______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.