You could modify your ddply
code to:
ddply(data,.(State),
function(x) with(x,
data.frame(100*round(table(Ideology)/length(Ideology),2))))
# State Ideology Freq
#1 CO Conservative 33
#2 CO Independent 17
#3 CO Liberal 50
#4 DC Conservative 33
#5 DC Independent 33
#6 DC Liberal 33