Normalisation and simplification of a plot - r
I'd like to make a graph that captures the impact of the intervention. As you can see in the plot below, the y-axis of my figure has different scales (e.g. values), making comparison difficult. Is it possible to normalise the y axis (0 and 1) on both figures? Is it also possible to create a plot that shows the intervention rate per day? For Monday, for example, display a black line without SEDM and a red line with
Sample code:
df %>%
group_by(Day, Time = ceiling_date(as.POSIXct(Time), '10 minutes')) %>%
summarise(kW= mean(kW)) %>%
ungroup
df$Day<- factor(df$Day,levels = c( "Monday", "Tuesday","Wednesday","Thursday","Friday","Saturday", "Sunday"))
#as.POSIXct(df$Time,format="%H:%M")
ggplot(transform(df, Time = as.POSIXct(Time)),
aes(x = Time,y =kW, group=Day)) +
geom_smooth(aes(color=Day)) +
#geom_boxplot()+
labs(x="", y="kW", title="Monthly electricity consumption without SEDM (House 3)") +
scale_x_datetime(date_labels = '%H:%M', date_breaks = '2 hours',expand = expansion(mult = c(0, 0)))+
#facet_wrap(~Day, ncol=1 )+
theme_bw()+
theme(axis.text.x = element_text(angle = 90, hjust = 1,family="Times", face="bold", size=12, color="black"),
axis.title.x = element_text(family="Times", face="bold", size=16, color="black"),
axis.text.y = element_text(family="Times", face="bold", size=12, color="black"),
axis.title.y = element_text(family="Times", face="bold", size=16, color="black"),
strip.text = element_text(size=15, face="bold"),
plot.title = element_text(size=20, face="bold"))+
theme(legend.title = element_blank(),
legend.text = element_text(family="Times", color = "black", size = 16,face="bold"),
legend.position="top",
legend.box = "horizontal",
plot.title = element_text(hjust = 0.5))+
guides(fill = guide_legend(nrow = 1))
Plot:
Data:
#for the first plot (without SEDM) first 300
structure(list(structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L), .Label = c("Monday", "Tuesday", "Wednesday", "Thursday",
"Friday", "Saturday", "Sunday"), class = "factor"), structure(c(41220,
41280, 41340, 41400, 41460, 41520, 41580, 41640, 41700, 41760,
41820, 41880, 41940, 42000, 42060, 42120, 42180, 42240, 42300,
42360, 42420, 42480, 42540, 42600, 42660, 42720, 42780, 42840,
42900, 42960, 43020, 43080, 43140, 43200, 43260, 43320, 43380,
43440, 43500, 43560, 43620, 43680, 43740, 43800, 43860, 43920,
43980, 44040, 44100, 44160, 44220, 44280, 44340, 44400, 44460,
44520, 44580, 44640, 44700, 44760, 44820, 44880, 44940, 45000,
45060, 45120, 45180, 45240, 45300, 45360, 45420, 45480, 45540,
45600, 45660, 45720, 45780, 45840, 45900, 45960, 46020, 46080,
46140, 46200, 46260, 46320, 46380, 46440, 46500, 46560, 46620,
46680, 46740, 46800, 46860, 46920, 46980, 47040, 47100, 47160,
47220, 47280, 47340, 47400, 47460, 47520, 47580, 47640, 47700,
47760, 47820, 47880, 47940, 48000, 48060, 48120, 48180, 48240,
48300, 48360, 48420, 48480, 48540, 48600, 48660, 48720, 48780,
48840, 48900, 48960, 49020, 49080, 49140, 49200, 49260, 49320,
49380, 49440, 49500, 49560, 49620, 49680, 49740, 49800, 49860,
49920, 49980, 50040, 50100, 50160, 50220, 50280, 50340, 50400,
50460, 50520, 50580, 50640, 50700, 50760, 50820, 50880, 50940,
51000, 51060, 51120, 51180, 51240, 51300, 51360, 51420, 51480,
51540, 51600, 51660, 51720, 51780, 51840, 51900, 51960, 52020,
52080, 52140, 52200, 52260, 52320, 52380, 52440, 52500, 52560,
52620, 52680, 52740, 52800, 52860, 52920, 52980, 53040, 53100,
53160, 53220, 53280, 53340, 53400, 53460, 53520, 53580, 53640,
53700, 53760, 53820, 53880, 53940, 54000, 54060, 54120, 54180,
54240, 54300, 54360, 54420, 54480, 54540, 54600, 54660, 54720,
54780, 54840, 54900, 54960, 55020, 55080, 55140, 55200, 55260,
55320, 55380, 55440, 55500, 55560, 55620, 55680, 55740, 55800,
55860, 55920, 55980, 56040, 56100, 56160, 56220, 56280, 56340,
56400, 56460, 56520, 56580, 56640, 56700, 56760, 56820, 56880,
56940, 57000, 57060, 57120, 57180, 57240, 57300, 57360, 57420,
57480, 57540, 57600, 57660, 57720, 57780, 57840, 57900, 57960,
58020, 58080, 58140, 58200, 58260, 58320, 58380, 58440, 58500,
58560, 58620, 58680, 58740, 58800, 58860, 58920, 58980, 59040,
59100, 59160), class = c("hms", "difftime"), units = "secs"),
c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 2.951667, 41.055, 10.733333, 2.951667, 3.22, 4.83,
3.22, 3.22, 3.22, 2.951667, 3.488333, 13.416667, 3.22, 3.22,
13.416667, 43.738333, 3.22, 3.22, 3.22, 3.488333, 3.22, 3.22,
3.488333, 2.951667, 11.806667, 3.756667, 45.348333, 4.025,
4.025, 4.293333, 4.83, 4.83, 15.026667, 4.561667, 46.153333,
4.025, 4.025, 3.756667, 4.025, 4.293333, 44.275, 44.811667,
3.756667, 3.756667, 3.756667, 3.756667, 3.756667, 3.756667,
3.756667, 3.756667, 3.756667, 44.006667, 3.756667, 3.756667,
3.756667, 3.488333, 3.756667, 3.756667, 44.006667, 44.006667,
3.756667, 3.756667, 4.293333, 3.756667, 4.293333, 4.561667,
4.83, 4.025, 4.025, 24.418333, 4.561667, 4.025, 4.293333,
32.736667, 9.928333, 1.073333, 1.341667, 1.073333, 0.805,
20.93, 41.591667, 0.805, 0.805, 1.073333, 1.341667, 1.61,
2.415, 43.201667), c(NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA), c(NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA), c(NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA), c(NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA), c(NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), c(NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), .Names = c("Day",
"Time", "kW", NA, NA, NA, NA, NA, NA), row.names = c(NA, 300L
), class = "data.frame")
#for the second plot (with SEDM) first 500
structure(list(Day = structure(c(5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L), .Label = c("Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday", "Sunday"), class = "factor"),
Time = structure(c(43380, 43440, 43500, 43560, 43620, 43680,
43740, 43800, 43860, 43920, 65700, 65760, 65820, 65880, 65940,
66000, 66060, 66120, 66180, 66240, 66300, 66360, 66420, 66480,
66540, 66600, 66660, 66720, 66780, 66840, 66900, 66960, 67020,
67080, 67140, 67200, 67260, 67320, 67380, 67440, 67500, 67560,
67620, 67680, 67740, 67800, 67860, 67920, 67980, 68040, 68100,
68160, 68220, 68280, 68340, 68400, 68460, 68520, 68580, 68640,
68700, 68760, 68820, 68880, 68940, 69000, 69060, 69120, 69180,
69240, 69300, 69360, 69420, 69480, 69540, 69600, 69660, 69720,
69780, 69840, 69900, 69960, 70020, 70080, 70140, 70200, 70260,
70320, 70380, 70440, 70500, 70560, 70620, 70680, 70740, 70800,
70860, 70920, 70980, 71040, 71100, 71160, 71220, 71280, 71340,
71400, 71460, 71520, 71580, 71640, 71700, 71760, 71820, 71880,
71940, 72000, 72060, 72120, 72180, 72240, 72300, 72360, 72420,
72480, 72540, 72600, 72660, 72720, 72780, 72840, 72900, 72960,
73020, 73080, 73140, 73200, 73260, 73320, 73380, 73440, 73500,
73560, 73620, 73680, 73740, 73800, 73860, 73920, 73980, 74040,
74100, 74160, 74220, 74280, 74340, 74400, 74460, 74520, 74580,
74640, 74700, 74760, 74820, 74880, 74940, 75000, 75060, 75120,
75180, 75240, 75300, 75360, 75420, 75480, 75540, 75600, 75660,
75720, 75780, 75840, 75900, 75960, 76020, 76080, 76140, 76200,
76260, 76320, 76380, 76440, 76500, 76560, 76620, 76680, 76740,
76800, 76860, 76920, 76980, 77040, 77100, 77160, 77220, 77280,
77340, 77400, 77460, 77520, 77580, 77640, 77700, 77760, 77820,
77880, 77940, 78000, 78060, 78120, 78180, 78240, 78300, 78360,
78420, 78480, 78540, 78600, 78660, 78720, 78780, 78840, 78900,
78960, 79020, 79080, 79140, 79200, 79260, 79320, 79380, 79440,
79500, 79560, 79620, 79680, 79740, 79800, 79860, 79920, 79980,
80040, 80100, 80160, 80220, 80280, 80340, 80400, 80460, 80520,
80580, 80640, 80700, 80760, 80820, 80880, 80940, 81000, 81060,
81120, 81180, 81240, 81300, 81360, 81420, 81480, 81540, 81600,
81660, 81720, 81780, 81840, 81900, 81960, 82020, 82080, 82140,
82200, 82260, 82320, 82380, 82440, 82500, 82560, 82620, 82680,
82740, 82800, 82860, 82920, 82980, 83040), class = c("hms",
"difftime"), units = "secs"), kW = c(0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 6.976667, 6.976667, 7.245, 7.245, 7.245, 7.245,
7.245, 7.245, 7.245, 7.245, 7.245, 7.245, 7.245, 7.245, 7.245,
7.245, 7.245, 7.245, 7.245, 7.245, 13.416667, 30.053333,
4.025, 4.025, 4.025, 4.025, 42.396667, 41.591667, 4.025,
4.025, 4.025, 4.025, 4.025, 4.025, 4.293333, 4.025, 4.025,
4.293333, 4.025, 4.025, 23.881667, 23.881667, 4.293333, 4.025,
4.293333, 42.665, 43.201667, 29.785, 4.293333, 16.636667,
4.025, 4.025, 4.025, 4.025, 4.025, 4.025, 4.293333, 5.903333,
5.635, 5.903333, 31.126667, 5.635, 5.635, 5.635, 5.635, 5.635,
5.903333, 5.635, 5.635, 5.635, 39.176667, 60.106667, 75.67,
75.67, 76.475, 30.321667, 6.976667, 7.781667, 7.781667, 39.713333,
39.713333, 39.713333, 31.663333, 31.663333, 31.663333, 18.515,
31.663333, 37.298333, 49.91, 59.301667, 24.15, 28.711667,
30.59, 35.956667, 38.64, 41.055, 24.955, 42.665, 52.325,
43.47, 31.395, 50.983333, 52.325, 40.518333, 44.543333, 50.178333,
41.591667, 50.715, 54.74, 50.983333, 65.741667, 48.031667,
41.591667, 50.715, 28.98, 5.366667, 7.781667, 28.98, 16.368333,
4.561667, 4.561667, 2.683333, 2.951667, 2.951667, 2.951667,
2.951667, 2.951667, 2.951667, 2.951667, 2.951667, 2.951667,
2.951667, 2.951667, 2.951667, 2.951667, 2.951667, 2.951667,
2.951667, 2.951667, 2.951667, 2.951667, 2.951667, 2.951667,
2.951667, 2.951667, 2.951667, 2.951667, 2.951667, 2.951667,
2.683333, 2.683333, 2.415, 2.415, 3.756667, 3.756667, 3.756667,
4.293333, 5.366667, 5.635, 5.366667, 5.366667, 4.83, 4.83,
4.561667, 3.22, 2.951667, 2.951667, 3.22, 3.22, 3.22, 3.22,
2.951667, 2.951667, 2.951667, 2.951667, 2.951667, 2.951667,
2.951667, 2.951667, 2.951667, 2.951667, 2.951667, 2.951667,
2.951667, 2.951667, 2.951667, 2.951667, 2.951667, 2.951667,
2.951667, 2.951667, 2.415, 2.415, 2.415, 2.415, 2.146667,
2.415, 2.146667, 2.415, 2.415, 2.415, 2.146667, 2.415, 2.415,
2.415, 2.415, 2.951667, 2.415, 2.415, 2.415, 2.415, 2.415,
2.415, 2.415, 2.415, 2.415, 2.415, 2.415, 2.415, 2.415, 2.415,
2.415, 2.415, 2.415, 2.415, 2.415, 2.683333, 2.683333, 2.683333,
2.683333, 2.683333, 2.415, 2.683333, 3.488333, 2.951667,
3.756667, 3.756667, 3.488333, 3.488333, 4.025, 4.025, 2.415,
2.415, 1.878333, 1.878333, 2.146667, 2.415, 1.878333, 2.146667,
2.146667, 2.146667, 1.878333, 1.878333, 1.878333, 1.878333,
1.878333, 1.878333, 1.878333, 1.878333, 1.878333, 1.878333,
1.878333, 1.878333, 1.878333, 3.488333, 3.22, 2.951667, 2.683333,
2.951667, 2.951667, 2.951667, 2.951667, 2.951667, 2.951667,
2.951667, 2.951667, 2.951667, 2.951667, 2.951667, 2.951667,
2.951667, 2.951667, 2.951667, 2.951667, 2.951667, 2.683333,
2.951667, 2.951667, 2.951667, 2.683333)), row.names = c(NA,
300L), class = "data.frame")
You could scale your "kW" variable with min and max like this:
library(ggplot2)
df$Day<- factor(df$Day,levels = c( "Monday", "Tuesday","Wednesday","Thursday","Friday","Saturday", "Sunday"))
#as.POSIXct(df$Time,format="%H:%M")
maxs <- max(df$kW)
mins <- min(df$kW)
df$kW <- scale(df$kW, center = mins, scale = maxs-mins)
ggplot(transform(df, Time = as.POSIXct(Time)),
aes(x = Time,y =kW, group=Day)) +
geom_smooth(aes(color=Day)) +
#geom_boxplot()+
labs(x="", y="kW", title="Monthly electricity consumption without SEDM (House 3)") +
scale_x_datetime(date_labels = '%H:%M', date_breaks = '2 hours',expand = expansion(mult = c(0, 0)))+
#facet_wrap(~Day, ncol=1 )+
theme_bw()+
theme(axis.text.x = element_text(angle = 90, hjust = 1,family="Times", face="bold", size=12, color="black"),
axis.title.x = element_text(family="Times", face="bold", size=16, color="black"),
axis.text.y = element_text(family="Times", face="bold", size=12, color="black"),
axis.title.y = element_text(family="Times", face="bold", size=16, color="black"),
strip.text = element_text(size=15, face="bold"),
plot.title = element_text(size=20, face="bold"))+
theme(legend.title = element_blank(),
legend.text = element_text(family="Times", color = "black", size = 16,face="bold"),
legend.position="top",
legend.box = "horizontal",
plot.title = element_text(hjust = 0.5))+
guides(fill = guide_legend(nrow = 1))
Output:
Related
How to produce histograms from large table set of mammals. new to coding
I am trying to create a histogram for the geographic range size of mammals. I have data columns with geographic range size and different mammal names. hist1 = hist(x = dat1$Range_Area_km2, breaks = 100, col = "blue", border = "green", main = "Geographic Range Size of Mammals", # add a title xlab = "Km2", # change axis labels ylab = "Frequency", xlim = c(0, 65000000), # change the axis limits ylim = c(0, 200)) I am expecting a histogram of geographic range size of all mammals. structure(list(rownames = 1:20, MSW05_Binomial = c("Melomys_rubicola", "Peromyscus_dickeyi", "Mogera_uchidai", "Pteropus_pelewensis", "Mysateles_garridoi", "Neotoma_anthonyi", "Microtus_breweri", "Hypsugo_lophurus", "Neotoma_martinensis", "Pteropus_howensis", "Crocidura_dhofarensis", "Mesocapromys_angelcabrerai", "Ochotona_gaoligongensis", "Myotis_abei", "Rhynchomys_isarogensis", "Calomyscus_tsolovi", "Monodelphis_unistriata", "Geocapromys_ingrahami", "Hesperoptenus_gaskelli", "Neotoma_bunkeri"), MSW05_Order = c("Rodentia", "Rodentia", "Soricomorpha", "Chiroptera", "Rodentia", "Rodentia", "Rodentia", "Chiroptera", "Rodentia", "Chiroptera", "Soricomorpha", "Rodentia", "Lagomorpha", "Chiroptera", "Rodentia", "Rodentia", "Didelphimorphia", "Rodentia", "Chiroptera", "Rodentia"), MSW05_Family = c("Muridae", "Cricetidae", "Talpidae", "Pteropodidae", "Capromyidae", "Cricetidae", "Cricetidae", "Vespertilionidae", "Cricetidae", "Pteropodidae", "Soricidae", "Capromyidae", "Ochotonidae", "Vespertilionidae", "Muridae", "Calomyscidae", "Didelphidae", "Capromyidae", "Vespertilionidae", "Cricetidae"), AdultBodyMass_g = c(100, 28.6, NA, NA, NA, 195.4, NA, NA, 240.16, 232.92, NA, NA, NA, NA, 122.29, NA, 55.3, 733.52, NA, 375), LitterSize = c(NA, NA, NA, NA, NA, NA, 4.5, NA, NA, 0.98, NA, NA, NA, NA, NA, NA, NA, 1.04, NA, NA), Range_Area_km2 = c(0.000187, 0.00725, 0.03, 0.06, 0.49, 0.66, 1.85, 2.7, 2.8, 3.16, 3.52, 3.55, 4.89, 5.11, 5.28, 6.78, 6.86, 8.36, 8.89, 9.15), Precip_Mean_mm = c(NA, NA, NA, NA, NA, NA, NA, 290, NA, NA, 7, 111, 195, 52, 331, 18, 107, NA, 237, NA), Temp_Mean_degC = c(NA, NA, NA, NA, NA, NA, NA, 24.6, NA, NA, 21.1, 24.6, 11.3, -0.9, 25.2, 17.1, 17.9, NA, 20.6, NA), ActivityCycle = c(NA, 1L, 2L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 2L, NA, 1L, 1L, NA, NA), DietBreadth = c(NA, NA, 1L, NA, 3L, NA, 1L, NA, NA, NA, NA, 3L, NA, NA, 1L, NA, 1L, 2L, NA, NA), HabitatBreadth = c(NA, NA, 1L, NA, 1L, NA, 2L, 1L, NA, 1L, NA, 1L, 1L, 1L, NA, NA, 1L, 2L, 1L, NA), Terrestriality = c(NA, NA, 1L, NA, 2L, NA, 1L, 2L, NA, 2L, NA, 2L, 1L, 2L, NA, NA, 1L, 2L, 2L, NA), TrophicLevel = c(NA, NA, 3L, NA, 2L, NA, 1L, NA, NA, NA, NA, 2L, NA, NA, 3L, NA, 3L, 1L, NA, NA)), row.names = c(NA, 20L), class = "data.frame") >
How to group multiple variables using r_bind and select? [duplicate]
This question already has answers here: Reshaping data.frame from wide to long format (8 answers) Closed 12 months ago. My data look like this: dput(srkw.dat) structure(list(year = c(1962L, 1976L, 1981L, 1981L, 1982L, 1987L, 1989L, 1990L, 1992L, 1992L, 1992L, 1994L, 1998L, 2003L, 2003L, 2003L, 2003L, 2004L, 2004L, 2004L, 2005L, 2005L, 2005L, 2005L, 2005L, 2005L, 2005L, 2005L, 2005L, 2005L, 2006L, 2006L, 2006L, 2006L, 2006L, 2006L, 2007L, 2007L, 2007L, 2008L, 2008L, 2008L, 2009L, 2009L, 2009L, 2010L, 2010L, 2010L, 2011L, 2011L, 2013L, 2013L, 2013L, 2014L, 2014L, 2014L, 2014L, 2014L, 2015L, 2015L, 2015L, 2015L, 2015L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2017L, 2018L, 2018L, 2018L, 2019L, 2020L, 2020L, 2020L, 2020L), whaleid1 = c("Lx", "Lx", "Lx", "Lx", "Lx", "L5", "Lx", "Kx", "L5", "Lx", "L21", "L5", "Lx", "Jx", "L5", "L7", "Jx", "L21", "L54", "Lx", "Jx", "J27", "J16", "J11", "Jx", "L5", "L5", "J30", "L95", "Lx", "Jx", "J35", "K40", "Lx", "L12", "Jx", "L106", "L21", "Kx", "L83", "L83", "L57", "J31", "J27", "J30", "L55", "L22", "K36", "Jx", "L72", "K21", NA, "K16", "J16", "J35", "L72", "J36", "L22", "K22", "K22", "L77", "J47", "Jx", "J40", "L119", "J2", "J35", "L103", "L77", "L87", "J39", "J22", "J38", "L115", "J31", NA, "J37", "Lx"), whalesex1 = c(NA, 0L, NA, NA, 0L, 0L, NA, NA, 0L, 0L, 0L, 0L, 1L, NA, 0L, 0L, NA, 0L, 0L, NA, NA, 1L, 0L, 0L, NA, 0L, 0L, 1L, 1L, NA, NA, 0L, 0L, NA, 0L, NA, 1L, 0L, NA, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, NA, 0L, 1L, NA, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, NA, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, NA, 0L, NA), whaleage1 = c(NA, NA, NA, NA, NA, 23L, NA, NA, 28L, NA, 42L, 30L, NA, NA, 39L, 42L, NA, 54L, 27L, NA, NA, 14L, 33L, 33L, NA, 41L, 41L, 10L, 9L, NA, NA, 8L, 43L, NA, 73L, NA, 2L, 57L, NA, 18L, 18L, 31L, 14L, 18L, 14L, 33L, 39L, 7L, NA, 25L, 27L, NA, 28L, 42L, 16L, 28L, 15L, 43L, 28L, 28L, 28L, 5L, NA, 12L, 4L, 60L, 18L, 13L, 29L, 24L, 15L, 23L, 15L, 9L, 25L, NA, 19L, NA), whaleid2 = c("Lx", "Lx", "Lx", "Lx", "Lx", "L58", "Lx", "Kx", "L58", "Lx", "Lx", "L58", NA, "Jx", "L73", "L57", "Jx", "L47", "L100", "Lx", NA, "J31", "J26", "J27", "Jx", "L73", "L73", "J31", "L72", "Lx", "Jx", "J37", "K16", "Lx", "L41", NA, "L41", "L26", NA, "L110", "L110", NA, "J36", "J31", "Kx", NA, "L94", "K42", NA, "Kx", "K25", NA, NA, "J26", "J47", "L105", "J41", "L94", NA, "K33", "L119", NA, NA, NA, NA, NA, "J47", "L109", "L119", "Jx", NA, "J40", NA, NA, "J56", NA, "Jx", "Lx"), whalesex2 = c(NA, NA, NA, NA, NA, 1L, NA, NA, 1L, 0L, NA, 1L, NA, NA, 1L, 1L, NA, 0L, 1L, NA, NA, 0L, 1L, 1L, NA, 1L, 1L, 0L, 0L, NA, NA, 0L, 0L, NA, 1L, NA, 1L, 0L, NA, 1L, 1L, NA, 0L, 0L, NA, NA, 0L, 1L, NA, NA, 1L, NA, NA, 1L, 1L, 1L, 0L, 0L, NA, 1L, 0L, NA, NA, NA, NA, NA, 1L, 1L, 0L, NA, NA, 0L, NA, NA, 0L, NA, NA, NA), whaleage2 = c(NA, NA, NA, NA, NA, 7L, NA, NA, 12L, NA, NA, 14L, NA, NA, 17L, 26L, NA, 30L, 3L, NA, NA, 10L, 14L, 14L, NA, 19L, 19L, 10L, 19L, NA, NA, 5L, 21L, NA, 29L, NA, 30L, 51L, NA, 1L, 1L, NA, 10L, 14L, NA, NA, 15L, 2L, NA, NA, 22L, NA, NA, 23L, 4L, 10L, 9L, 19L, NA, 14L, 3L, NA, NA, NA, NA, NA, 6L, 9L, 4L, NA, NA, 14L, NA, NA, 1L, NA, NA, NA), whaleid3 = c(NA, NA, NA, NA, "Lx", "L73", "Lx", "Kx", "L73", "Lx", NA, "L73", NA, "Jx", NA, NA, NA, "Lx", NA, NA, NA, "Jx", "J36", "J39", NA, "L67", "L67", NA, NA, NA, NA, "J40", "K35", "Lx", "L77", NA, "L57", "L47", NA, "L47", "L91", NA, "J39", "J39", NA, NA, "L113", NA, NA, NA, "K26", NA, NA, "J36", NA, NA, "J42", "L113", NA, NA, NA, NA, NA, NA, NA, NA, "L87", "L123", "L113", "Jx", NA, "J49", NA, NA, "J36", NA, NA, "Lx"), whalesex3 = c(NA, NA, NA, NA, 0L, 1L, NA, NA, 1L, NA, NA, 1L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0L, 1L, NA, 0L, 0L, NA, NA, NA, NA, 0L, 1L, NA, 0L, NA, 1L, 0L, NA, 0L, 0L, NA, 1L, 1L, NA, NA, 0L, NA, NA, NA, 1L, NA, NA, 0L, NA, NA, 0L, 0L, NA, NA, NA, NA, NA, NA, NA, NA, 1L, 1L, 0L, 0L, NA, 1L, NA, NA, 0L, NA, NA, NA), whaleage3 = c(NA, NA, NA, NA, NA, 1L, NA, NA, 6L, NA, NA, 8L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 6L, 2L, NA, 20L, 20L, NA, NA, NA, NA, 2L, 4L, NA, 19L, NA, 30L, 33L, NA, 34L, 13L, NA, 6L, 6L, NA, NA, 1L, NA, NA, NA, 20L, NA, NA, 15L, NA, NA, 7L, 5L, NA, NA, NA, NA, NA, NA, NA, NA, 24L, 1L, 7L, NA, NA, 6L, NA, NA, 21L, NA, NA, NA), whaleid4 = c(NA, NA, NA, NA, "Lx", NA, "Lx", "Kx", NA, "Lx", NA, NA, NA, "Jx", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "L101", "L101", NA, NA, NA, NA, NA, NA, "Lx", "L94", NA, "L82", "Lx", NA, "L111", NA, NA, "Kx", NA, NA, NA, NA, NA, NA, NA, "K35", NA, NA, "J42", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Jx", NA, NA, NA, NA, "J47", NA, NA, "Lx" ), whalesex4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, 1L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1L, 1L, NA, NA, NA, NA, NA, NA, NA, 0L, NA, 0L, NA, NA, 0L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1L, NA, NA, 0L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1L, NA, NA, NA), whaleage4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 3L, 3L, NA, NA, NA, NA, NA, NA, NA, 11L, NA, 17L, NA, NA, 1L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 11L, NA, NA, 7L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 10L, NA, NA, NA), whaleid5 = c(NA, NA, NA, NA, NA, NA, "Lx", "Kx", NA, NA, NA, NA, NA, "Jx", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "L86", NA, NA, "L91", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Jx", NA, NA, NA, NA, "J49", NA, NA, NA), whalesex5 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0L, NA, NA, 0L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1L, NA, NA, NA), whaleage5 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 16L, NA, NA, 13L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 8L, NA, NA, NA), whaleid6 = c(NA, NA, NA, NA, NA, NA, "Lx", "Kx", NA, NA, NA, NA, NA, "Jx", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "L95", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Jx", NA, NA, NA, NA, NA, NA, NA, NA), whalesex6 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), whaleage6 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 11L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), whaleid7 = c(NA, NA, NA, NA, NA, NA, "Lx", "Kx", NA, NA, NA, NA, NA, "Jx", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "L77", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Jx", NA, NA, NA, NA, NA, NA, NA, NA), whalesex7 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), whaleage7 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 20L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), whaleid8 = c(NA, NA, NA, NA, NA, NA, "Lx", "Kx", NA, NA, NA, NA, NA, "Jx", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "L94", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Jx", NA, NA, NA, NA, NA, NA, NA, NA), whalesex8 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), whaleage8 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 12L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), event.id = 1:78), row.names = c(NA, -78L), class = "data.frame") I want to use r_bind to group by whale IDs, while ascribing each whale's respective age and sex to its ID. I got this far: events.by.id = rbind( srkw.dat %>% select(event.id, year, id = whaleid1), srkw.dat %>% select(event.id, year, id = whaleid2), srkw.dat %>% select(event.id, year, id = whaleid3), srkw.dat %>% select(event.id, year, id = whaleid4), srkw.dat %>% select(event.id, year, id = whaleid5), srkw.dat %>% select(event.id, year, id = whaleid6), srkw.dat %>% select(event.id, year, id = whaleid7) ) %>% filter(!is.na(id)) But I wasn't sure what extra syntax is needed to link each whale's age and sex to its ID? Additionally, after that is done, is there an elegant way to selectively remove the whale IDs (and their ascribed sexes/ages) that are Jx, Lx, Kx, etc? Thanks so much!
I think it would help if you get data in long format using pivot_longer with id, sex and age as separate columns. This might be simpler than your attempt. res <- tidyr::pivot_longer(srkw.dat, cols = -year, names_to = c('.value', 'num'), names_pattern = 'whale(.*?)(\\d+)', values_drop_na = TRUE) res # A tibble: 211 x 5 # year num id sex age # <int> <chr> <chr> <int> <int> # 1 1962 1 Lx NA NA # 2 1962 2 Lx NA NA # 3 1976 1 Lx 0 NA # 4 1976 2 Lx NA NA # 5 1981 1 Lx NA NA # 6 1981 2 Lx NA NA # 7 1981 1 Lx NA NA # 8 1981 2 Lx NA NA # 9 1982 1 Lx 0 NA #10 1982 2 Lx NA NA # … with 201 more rows It would be easy now to filter data with res. For example, to drop id's c('Jx', 'Lx', 'Kx') you may do - res %>% filter(!id %in% c('Jx', 'Lx', 'Kx'))
What you want to do is pivot your data. You've actually kind of developed your own version of tidyr::pivot_longer() -- but it's easier with Hadley's version. To your second question, you can use stringr::str_ends() to filter by ids ending in "x". library(tidyverse) srkw.dat_long <- srkw.dat %>% pivot_longer( cols = starts_with("whale"), names_to = c(".value", NA), names_pattern = "whale(\\D+)(\\d+)" ) %>% filter(!(is.na(id) | str_ends(id, "x"))) # # A tibble: 132 x 5 # year event.id id sex age # <int> <int> <chr> <int> <int> # 1 1987 6 L5 0 23 # 2 1987 6 L58 1 7 # 3 1987 6 L73 1 1 # 4 1992 9 L5 0 28 # 5 1992 9 L58 1 12 # 6 1992 9 L73 1 6 # 7 1992 11 L21 0 42 # 8 1994 12 L5 0 30 # 9 1994 12 L58 1 14 # 10 1994 12 L73 1 8 # # ... with 122 more rows
r - remove categories from a bar chart
Using this code: ggplot(Template.2006.2017, aes(x=Disaster_category, y=Total_US_received_from.CERF)) + ggtitle("MEAN Total Funding Received CERF") + geom_bar(stat="summary", fun.y = "mean", fill="lightblue") + coord_flip() + labs(y="US$") + labs(x="") I've created this bar chart: showing the funding for various disaster categories. Now, I would like to remove all the categories that have received zero funding (Other, Insect infestation, Disease and missing/NA). How can this be done in r? Here's my data (compressed): structure(list(Disaster_category = structure(c(1L, 15L, 17L, 15L, 5L, 8L, 13L, 8L, 2L, 8L, 2L, 3L, 8L, 2L, 8L, 2L, 10L, 5L, 7L, 8L, 15L, 2L, 8L, 2L, 15L, 15L, 8L, 15L, 2L, 17L, 2L, 7L, 2L, 8L, 2L, 3L, 2L, 8L, 8L, 2L, 8L, 17L, 2L, 3L, 8L, 8L, 2L, 8L, 8L, 8L, 2L, 8L, 3L, 2L, 3L, 2L, 8L, 2L, 3L, 8L, 2L, 8L, 2L, 15L, 5L, 8L, 13L, 8L, 15L, 2L, 8L, 2L, 3L, 2L, 3L, 15L, 8L, 3L, 2L, 3L, 8L, 2L, 3L, 2L, 8L, 2L, 8L, 15L, 2L, 8L, 8L, 5L, 2L, 8L, 2L, 3L, 2L, 17L, 2L, 17L, 2L, 4L, 5L, 8L, 8L, 2L, 8L, 15L, 2L, 15L, 15L, 7L, 2L, 8L, 2L, 15L, 15L, 7L, 8L, 17L, 2L, 15L, 8L, 2L, 17L, 2L, 3L, 8L, 2L, 5L, 2L, 8L, 2L, 8L, 8L, 15L, 2L, 8L, 2L, 15L, 8L, 2L, 15L, 8L, 7L, 8L, 15L, 2L, 8L, 8L), .Label = c("", " ", "Disease", "Disease related disaster", "Drought", "Drought & storm", "Extreme temperature / fire", "Flood", "Flood & drought", "Insect infestation", "Insect infestation & drought", "Landslide & flood", "Landslide / mudslide", "Other", "Storm", "Storm & flood", "Winter"), class = "factor"), Total_US_received_from.CERF = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 678307.8333, 678307.8333, 678307.8333, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1110469.5, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1905355, NA, NA, NA, NA, NA, NA, NA, NA, NA, 2493246, 2493246, 2493246, 2493246, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 333333.3333, 333333.3333, 333333.3333, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), Total_US_received = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 15507224.5, 15507224.5, 15507224.5, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 333333.3333, 333333.3333, 333333.3333, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), Total_US_required = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 20502064.83, 20502064.83, 20502064.83, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 3070192, NA, NA, NA, NA, NA, NA, NA, NA, NA, 49955895.25, 49955895.25, 49955895.25, 49955895.25, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 333333.3333, 333333.3333, 333333.3333, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, 150L), class = "data.frame")
Consider calculating group means with ave before plotting and then subset all rows with means greater than zero as the underlying data for plotting: # ADD NEW INLINE GROUP MEAN Template.2006.2017$CERF_categ_mean <- with(Template.2006.2017, ave(Total_US_received_from.CERF, Disaster_category, FUN=function(x) mean(x, na.rm=TRUE))) # SUBSET DATAFRAME sub_df <- subset(Template.2006.2017, CERF_categ_mean > 0) # PLOT SUBSETTED DATA ggplot(sub_df, aes(x=Disaster_category, y=Total_US_received_from.CERF)) + ggtitle("MEAN Total Funding Received CERF") + geom_bar(stat="summary", fun.y = "mean", fill="lightblue") + coord_flip() + labs(y="US$") + labs(x="")
Would removing the NA values from the dataframe solve your problem? library(tidyverse) Template.2006.2017 %>% filter(!is.na(Total_US_received_from.CERF)) %>% ggplot(aes(x=Disaster_category, y=Total_US_received_from.CERF)) + ggtitle("MEAN Total Funding Received CERF") + geom_bar(stat="summary", fun.y = "mean", fill="lightblue") + coord_flip() + labs(y="US$") + labs(x="")
ggplot - bar chart with multiple y-variables
I'm trying to create a bar chart with three y-variables (Total_us_received, Total_us_required, Total_us_received_from.CERF) using ggplot2. All three y-variables are measured on the same scale (US$). This far I've created a bar chart with Total_us_received as the y-variables and Disaster_category as the x-variable using this code: ggplot(Template.2006.2017.text, aes(Disaster_category, y=Total_US_received)) + geom_bar(stat ="identity", fill="lightblue") + coord_flip() However, every attempt I've made to include the other two y-variables into the graph have failed. How can I include the other two variables into the graph? A follow-up questions: Can I make the graph show the mean of every category of the x-variable (Disaster_subtype) without NA:s instead of the total sum? Here's my data in dput (compressed version): structure(list(Disaster_category = structure(c(1L, 15L, 17L, 15L, 5L, 8L, 13L, 8L, 2L, 8L, 2L, 3L, 8L, 2L, 8L, 2L, 10L, 5L, 7L, 8L, 15L, 2L, 8L, 2L, 15L, 15L, 8L, 15L, 2L, 17L, 2L, 7L, 2L, 8L, 2L, 3L, 2L, 8L, 8L, 2L, 8L, 17L, 2L, 3L, 8L, 8L, 2L, 8L, 8L, 8L, 2L, 8L, 3L, 2L, 3L, 2L, 8L, 2L, 3L, 8L, 2L, 8L, 2L, 15L, 5L, 8L, 13L, 8L, 15L, 2L, 8L, 2L, 3L, 2L, 3L, 15L, 8L, 3L, 2L, 3L, 8L, 2L, 3L, 2L, 8L, 2L, 8L, 15L, 2L, 8L, 8L, 5L, 2L, 8L, 2L, 3L, 2L, 17L, 2L, 17L, 2L, 4L, 5L, 8L, 8L, 2L, 8L, 15L, 2L, 15L, 15L, 7L, 2L, 8L, 2L, 15L, 15L, 7L, 8L, 17L, 2L, 15L, 8L, 2L, 17L, 2L, 3L, 8L, 2L, 5L, 2L, 8L, 2L, 8L, 8L, 15L, 2L, 8L, 2L, 15L, 8L, 2L, 15L, 8L, 7L, 8L, 15L, 2L, 8L, 8L, 7L, 13L, 8L, 2L, 8L, 2L, 8L, 8L, 3L, 2L, 13L, 2L, 3L, 8L, 2L, 15L, 15L, 8L, 15L, 2L, 5L, 3L, 3L, 8L, 3L, 2L, 8L, 8L, 3L, 2L, 8L, 2L, 15L, 2L, 17L, 2L, 5L, 2L, 8L, 2L, 15L, 2L, 3L, 8L, 8L, 2L, 8L, 8L, 2L, 3L), .Label = c("", " ", "Disease", "Disease related disaster", "Drought", "Drought & storm", "Extreme temperature / fire", "Flood", "Flood & drought", "Insect infestation", "Insect infestation & drought", "Landslide & flood", "Landslide / mudslide", "Other", "Storm", "Storm & flood", "Winter"), class = "factor"), Total_US_received_from.CERF = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 678307.8333, 678307.8333, 678307.8333, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1110469.5, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1905355, NA, NA, NA, NA, NA, NA, NA, NA, NA, 2493246, 2493246, 2493246, 2493246, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 333333.3333, 333333.3333, 333333.3333, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 9365420, NA, NA, 14321419, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), Total_US_received = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 15507224.5, 15507224.5, 15507224.5, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 333333.3333, 333333.3333, 333333.3333, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), Total_US_required = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 20502064.83, 20502064.83, 20502064.83, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 3070192, NA, NA, NA, NA, NA, NA, NA, NA, NA, 49955895.25, 49955895.25, 49955895.25, 49955895.25, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 333333.3333, 333333.3333, 333333.3333, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, 200L), class = "data.frame")
You can transform you data into long format and then plot them: library(tidyr) library(ggplot2) my_data %>% gather(Total_US_category, Total_US, Total_US_received, Total_US_required, Total_US_received_from.CERF) %>% ggplot(aes(Disaster_category, y = Total_US, fill = Total_US_category)) + geom_col(position = position_dodge()) + coord_flip() If you want to plot the mean-value per disaster you can first summarize the data with dplyr: library(dplyr) my_data_sum <- my_data %>% gather(Total_US_category, Total_US, Total_US_received, Total_US_required, Total_US_received_from.CERF) %>% group_by(Disaster_category, Total_US_category) %>% summarize(Total_US_mean = mean(Total_US, na.rm = T)) my_data_sum # A tibble: 33 x 3 # Groups: Disaster_category [?] # Disaster_category Total_US_category Total_US_mean # <fct> <chr> <dbl> # 1 "" Total_US_received NaN # 2 "" Total_US_received_from.CERF NaN # 3 "" Total_US_required NaN # 4 " " Total_US_received NaN # 5 " " Total_US_received_from.CERF NaN # 6 " " Total_US_required NaN # 7 Disease Total_US_received NaN # 8 Disease Total_US_received_from.CERF NaN # 9 Disease Total_US_required NaN # 10 Disease related disaster Total_US_received NaN # ... with 23 more rows And then plot the data: ggplot(my_data_sum, aes(Disaster_category, y = Total_US_mean, fill = Total_US_category)) + geom_col(position = position_dodge()) + coord_flip()
How to get conditional weighted means for several columns
For the following dataframe: eu <- structure(list(land = structure(c(1L, 4L, 5L, 12L, 9L, 13L, 16L, 18L, 27L, 10L, 25L, 21L, 28L, 19L, 8L, 26L, 6L, 3L, 15L, 14L, 11L, 17L, 20L, 23L, 24L, 2L, 22L, 7L), .Label = c("Belgie", "Bulgarije", "Cyprus", "Denemarken", "Duitsland", "Estland", "Europese Unie", "Finland", "Frankrijk", "Griekenland", "Hongarije", "Ierland", "Italie", "Letland", "Litouwen", "Luxemburg", "Malta", "Nederland", "Oostenrijk", "Polen", "Portugal", "Roemenie", "Slovenie", "Slowakije", "Spanje", "Tsjechie", "Verenigd Koninkrijk", "Zweden"), class = "factor"), `1979` = c(91.36, 47.82, 65.73, 63.61, 60.71, 85.65, 88.91, 58.12, 32.35, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 61.99), `1981` = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, 81.48, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), `1984` = c(92.09, 52.38, 56.76, 47.56, 56.72, 82.47, 88.79, 50.88, 32.57, 80.59, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 58.98), `1987` = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 68.52, 72.42, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), `1989` = c(90.73, 46.17, 62.28, 68.28, 48.8, 81.07, 87.39, 47.48, 36.37, 80.03, 54.71, 51.1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 58.41), `1994` = c(90.66, 52.92, 60.02, 43.98, 52.71, 73.6, 88.55, 35.69, 36.43, 73.18, 59.14, 35.54, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 56.67), `1995` = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 41.63, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), `1996` = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 67.73, 57.6, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), `1999` = c(91.05, 50.46, 45.19, 50.21, 46.76, 69.76, 87.27, 30.02, 24, 70.25, 63.05, 39.93, 38.84, 49.4, 30.14, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 49.51), `2004` = c(90.81, 47.89, 43, 58.58, 42.76, 71.72, 91.35, 39.26, 38.52, 63.22, 45.14, 38.6, 37.85, 42.43, 39.43, 28.3, 26.83, 72.5, 48.38, 41.34, 38.5, 82.39, 20.87, 28.35, 16.97, NA, NA, 45.47), `2007` = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 29.22, 29.47, NA), `2009` = c(90.39, 59.54, 43.3, 58.64, 40.63, 65.05, 90.75, 36.75, 34.7, 52.61, 44.9, 36.78, 45.53, 45.97, 40.3, 28.2, 43.9, 59.4, 20.98, 53.7, 36.31, 78.79, 24.53, 28.33, 19.64, 38.99, 27.67, 43), inwoners = c(11161642, 5602628, 80523746, 4591087, 65578819, 59685227, 537039, 16779575, 63896071, 11062508, 46727890, 10487289, 9555893, 8451860, 5426674, 10516125, 1320174, 865878, 2971905, 2023825, 9908798, 421364, 38533299, 2058821, 5410836, 7284552, 20020074, 501403599), plicht = structure(c(1L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("ja", "nee"), class = "factor")), .Names = c("land", "1979", "1981", "1984", "1987", "1989", "1994", "1995", "1996", "1999", "2004", "2007", "2009", "inwoners", "plicht"), row.names = c(NA, -28L), class = "data.frame") I need conditional column means. I can do that with: verplicht <- c("Europese Unie (stemplicht)", colMeans(eu[eu$plicht=="ja",c(2:13)], na.rm=TRUE), NA) vrij <- c("Europese Unie (geen stemplicht)", colMeans(eu[eu$plicht=="nee",c(2:13)], na.rm=TRUE), NA) eu2 <- rbind(eu, verplicht, vrij) However, I need weighted column means with country population (the inwoners column) as the weights. I tried to that with: verplicht <- c("Europese Unie (stemplicht)", lapply(eu[eu$plicht=="ja",c(2:13)], weighted.mean(x, eu[eu$plicht=="ja",14], na.rm=TRUE)), NA) but that resulted in the following error: Error in weighted.mean.default(x, eu[eu$plicht == "ja", 14], na.rm = TRUE) : 'x' and 'w' must have the same length I understand what the error-message is saying, but don't know how to solve this. Any suggestions?
The problem is with how you're using lapply. Here's the correct code: lapply(eu[eu$plicht=='ja',2:13], weighted.mean, eu[eu$plicht=='ja','inwoners'], na.rm=TRUE) lapply(eu[eu$plicht=='nee',2:13], weighted.mean, eu[eu$plicht=='nee','inwoners'], na.rm=TRUE) Notice how weighted.mean is used as an argument, rather than inside an anonymous function with x as an argument. You could equivalently do: lapply(eu[eu$plicht=='ja',2:13], function(x) weighted.mean(x, eu[eu$plicht=='ja','inwoners'], na.rm=TRUE)) lapply(eu[eu$plicht=='nee',2:13], function(x) weighted.mean(x, eu[eu$plicht=='nee','inwoners'], na.rm=TRUE)) But you're currently kind of mixing the two different ways of using lapply.
If inwoners is the population, then > (weights <- with(eu, inwoners/sum(inwoners))) # [1] 0.0111303968 0.0055869443 0.0802983327 0.0045782350 0.0653952416 # [6] 0.0595181478 0.0005355356 0.0167326033 0.0637172042 0.0110315403 # [11] 0.0465970828 0.0104579315 0.0095291428 0.0084282004 0.0054114829 # [16] 0.0104866868 0.0013164784 0.0008634541 0.0029635856 0.0020181596 # [21] 0.0098810599 0.0004201845 0.0384254312 0.0020530577 0.0053956892 # [26] 0.0072641601 0.0199640310 0.5000000000 and the weighted mean of the 2004 column, for example, is > weighted.mean(eu$`2004`, w = weights, na.rm = TRUE) # [1] 45.31782 To get the weighted mean of each of the year columns for when plicht == 'ja', > s <- subset(eu, plicht == "ja") > w2 <- weights[as.numeric(rownames(s))] > newDF <- do.call(rbind, lapply(2:13, function(i){ data.frame(wtMean.ja = weighted.mean(s[,i], w = w2, na.rm = TRUE)) })) > rownames(newDF) <- names(s)[2:13] > newDF # wtMean.ja # 1979 86.56735 # 1981 81.48000 # 1984 83.56127 # 1987 68.52000 # 1989 72.30636 # 1994 69.86950 # 1995 NaN # 1996 NaN # 1999 69.28708 # 2004 63.17060 # 2007 NaN # 2009 58.99465