How can I use subscripts to draw the last graph with one call to                
         
function xyplot()?                                                              
         
                                                                                
         
Thanks,                                                                         
         
Naresh                                                                          
         
                                                                                
         
library(data.table)                                                             
         
library(lattice)                                                                
         
library(latticeExtra)                                                           
         
                                                                                
         
mydt2024 <- data.table(                                                         
         
    date = rep(as.Date(c("2024-11-01", "2024-11-04")), c(8, 8)),                
         
    day_forward = rep(1:8, 2),                                                  
         
    news_clicks = c(10, 12, 13, 18, 20, 21, 15, 11, 21, 23, 25, 18, 14, 12,     
         
                    12, 10),                                                    
         
    days_to_election = rep(c(4, 1), c(8, 8)),                                   
         
    electyear = "Election 2024")                                                
         
                                                                                
         
## Works when only condition is present                                         
         
mydt2024[                                                                       
         
  , xyplot(news_clicks ~ day_forward | date, type = c("l", "g"),                
         
           panel = function(x, y, ..., subscripts) {                            
         
               panel.xyplot(x, y, ...)                                          
         
               panel.abline(v = days_to_election[subscripts][1], lty = 2)       
         
           })                                                                   
         
]                                                                               
         
                                                                                
         
mydt2020 <- data.table(                                                         
         
    date = rep(as.Date(c("2020-10-30", "2020-11-02")), c(8, 8)),                
         
    day_forward = rep(1:8, 2),                                                  
         
    news_clicks = c(9, 11, 12, 17, 21, 20, 14, 8, 20, 24, 28, 15, 12, 10,       
         
                    8, 6),                                                      
         
    days_to_election = rep(c(4, 1), c(8, 8)),                                   
         
    electyear = "Election 2020"                                                 
         
)                                                                               
         
                                         
mydt <- rbind(mydt2020, mydt2024)                                               
         
mydt[, `:=`(electlabel = paste(days_to_election, "Days Before"))]               
         
                                                                                
         
## This does not work with both condition and group                             
         
mydt[                                                                           
         
  , xyplot(news_clicks ~ day_forward | electlabel, groups = electyear,          
         
           type = c("o", "g"), auto.key = list(columns = 2, space = "bottom"),  
         
           panel = function(x, y, ..., subscripts) {                            
         
               panel.xyplot(x, y, ...)                                          
         
               panel.abline(v = days_to_election[subscripts][1], lty = 2)       
         
           })                                                                   
         
]                                                                               
         
                                                                                
         
## This works                                                                   
         
electplot <- mydt[                                                              
         
  , xyplot(news_clicks ~ day_forward | electlabel, groups = electyear,          
         
           type = c("o", "g"), auto.key = list(columns = 2, space = "bottom"))  
         
]                                                                               
         
                                                                                
         
vlineplot <- mydt[                                                              
         
  , xyplot(news_clicks ~ day_forward | electlabel,                              
         
           panel = function(x, y, ..., subscripts) {                            
         
               panel.abline(v = days_to_election[subscripts][1], lty = 2)       
         
           })                                                                   
         
]                                                                               
         
                                                                                
         
electplot + vlineplot   
______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide https://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to