I think what you need to do is join the perturbed data to the source data. If your data are in a data frame called DF, the code would look like this.
library(dplyr)
SourceData <- filter(DF, node_type = "source")
PerturbedData <- filter(DF, node_type = "perturbed")
JoinedData <- inner_join(SourceData, PerturbedData, by = c("node", "rep", "day"), suffix = c(".Src", ".Prtb"))
That will give you a new data frame with both the source and perturbed data matched by node, rep and day.
I could not test the code since I do not have your data. I hope I did not make any mistakes.