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)

Upvotes: 0

Views: 736

Answers (1)

Ronak Shah
Ronak Shah

Reputation: 389275

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))

Upvotes: 2

Related Questions