You can do something like :
ddply(df,.(N), summarise,
low=mean(sapply(grep("low",colnames(df),value=T),function(x){get(x)})),
high=mean(sapply(grep("high",colnames(df),value=T),function(x){get(x)})))
which gives this output :
N low high
1 1 0.94613752 1.47197645
2 2 -0.68887596 -0.05779876
3 3 -0.28589753 -0.55694341
4 4 -0.01378869 0.28204629
5 5 -0.08681600 0.88544497
data :
> dput(df)
structure(list(low_1 = c(0.885675347945903, -1.30343272566325, -2.44201300062675, -1.27709377574332, -0.794159839824383),
low_2 = c(1.00659968581264,-0.0743191876393787, 1.87021794472605, 1.24951638739919, 0.620527846366092),
high_1 = c(0.630374573470948, 0.169009703225843, -0.573629421621814, 0.340752780334754, 0.417022085050569),
high_2 = c(2.31357832822303,-0.284607218026423, -0.540257400090053, 0.223339795927736, 1.35386785598766),
N = c(1, 2, 3, 4, 5)),
.Names = c("low_1", "low_2", "high_1", "high_2", "N"),
row.names = c(NA, -5L), class = "data.frame")