Search code examples
rdataframecomparisondifference

R calculate difference between all values of two columns


How can I calculate the difference between all values of a two columns.

X Mass_1  Mass_2
1 109.8    203.4  
2 306.7    305.5
3 658.7    446.5

I need the difference of Mass_1 against all numbers of Mass_2

> X  Mass_1        Mass_2_1         Mass_2_2     Mass_2_3       
> 1   109.8      (109.8-203.4)    (109.8-305.5)   (109.8-446.5) 
> 2   306.7      (306.7-203.4)    (306.7-305.5)   (306.7-446.5) 
> 3   658.7      (658.7-203.4)    (658.7-305.5)   (658.7-446.5)

Solution

  • You may use lapply -

    cols <- paste0('Mass_2_', seq(nrow(df)))
    df[cols] <- lapply(df$Mass_2, function(x) df$Mass_1 - x)
    df
    
    #  X Mass_1 Mass_2 Mass_2_1 Mass_2_2 Mass_2_3
    #1 1  109.8  203.4    -93.6   -195.7   -336.7
    #2 2  306.7  305.5    103.3      1.2   -139.8
    #3 3  658.7  446.5    455.3    353.2    212.2
    

    Or with outer -

    df[cols] <- outer(df$Mass_1, df$Mass_2, `-`)
    

    data

    df <- structure(list(X = 1:3, Mass_1 = c(109.8, 306.7, 658.7), Mass_2 = c(203.4, 
    305.5, 446.5)), class = "data.frame", row.names = c(NA, -3L))