merge_data provides a three-way merge: suppose two versions are based on a common version, this function will merge tables a and b.

merge_data(parent, a, b)

Arguments

parent

data.frame

a

data.frame changed version of parent

b

data.frame other changed version of parent

Value

merged data.frame. When a merge has conflicts the columns of conflicting changes are of type character and contain all three values.

Details

If both a and b change the same table cell with a different value, this results in a conflict. In that case a warning will be generated with the number of conflicts. In the returned data.frame of a conflicting merge columns with conflicting values are of type character and contain all three values coded as

(parent) a /// b

See also

Examples

parent <- a <- b <- iris[1:3,]
a[1,1] <- 10
b[2,1] <- 11
# succesful merge
merge_data(parent, a, b)
#>   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> 1         10.0         3.5          1.4         0.2  setosa
#> 2         11.0         3.0          1.4         0.2  setosa
#> 3          4.7         3.2          1.3         0.2  setosa

parent <- a <- b <- iris[1:3,]
a[1,1] <- 10
b[1,1] <- 11
# conflicting merge (both a and b change same cell)
merged <- merge_data(parent, a, b)
#> Warning: 
#> 	1 conflict(s) detected!
#> 	Conflicting values are noted with '(((parent))) a /// b'.
#> 	Use 'which_conflict' to find out which rows contain conflicting values.
merged #note the conflict
#>            Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> 1 ((( 5.1 ))) 10 /// 11         3.5          1.4         0.2  setosa
#> 2                   4.9         3.0          1.4         0.2  setosa
#> 3                   4.7         3.2          1.3         0.2  setosa

#find out which rows contain a conflict
which_conflicts(merged)
#> [1] 1