Try this:
transform(DF, Pct = 100 * ave(Frequency, City, FUN = prop.table))
which gives:
City Open Frequency Pct
1 Wickenburg False 2 7.142857
2 Wickenburg True 26 92.857143
3 Wittmann True 2 50.000000
4 Wittmann False 2 50.000000
5 Youngtown True 7 100.000000
6 Yuma True 1 100.000000