user2300940
user2300940

Reputation: 2385

How to subtract paired samples in data frame in R

I would like to subtract paired sample by each other to get the differences between Cancer and Normal. In my example I would subtract the numbers in value for which the two rows which Pairing are the same. I am not sure were to start.

            value    Sample      Group  Pairing Dataset
Sample_100G 8.063495 Sample_100G Cancer     100 Wei et al.
Sample_100R 3.226365 Sample_100R Normal     100 Wei et al.
Sample_106G 4.551518 Sample_106G Cancer     106 Wei et al.
Sample_106R     0    Sample_106R Normal     106 Wei et al.
Sample_122G     0    Sample_122G Cancer     122 Wei et al.
Sample_122R 0.000000 Sample_122R Normal     122 Wei et al.

out

 Diff      Group  Pairing Dataaset
 8.06-3.22  Cancer     100 Wei et al.
 4.55-0     Cancer     106 Wei et al.
 0-0        Cancer     122 Wei et al.

Upvotes: 1

Views: 393

Answers (2)

MKR
MKR

Reputation: 20095

If OP is not very keen on using spread then a solution can be achieved using left_join as:

library(dplyr)

left_join(filter(df, Group=="Cancer"), filter(df, Group=="Normal"), by="Pairing") %>%
  mutate(Diff = value.x - value.y) %>%
  select(Diff, Group = Group.x, Pairing, Dataset = Dataset.x )

#       Diff  Group Pairing    Dataset
# 1 4.837130 Cancer     100 Wei et al.
# 2 4.551518 Cancer     106 Wei et al.
# 3 0.000000 Cancer     122 Wei et al.

Upvotes: 1

IceCreamToucan
IceCreamToucan

Reputation: 28695

library(tidyverse)
df %>% 
  select(-Sample) %>% 
  spread(Group, value) %>% 
  mutate(diff = Cancer - Normal)

#   Pairing    Dataset   Cancer   Normal     diff
# 1     100 Wei et al. 8.063495 3.226365 4.837130
# 2     106 Wei et al. 4.551518 0.000000 4.551518
# 3     122 Wei et al. 0.000000 0.000000 0.000000

Upvotes: 3

Related Questions