0
votes

Here I've nested loop i don't know how to convert this into apply can anyone tell me how to convert this in to apply function

pa_m = structure(list(X = c(4L, 24L, 44L, 64L, 84L, 104L, 124L, 144L, 
    164L, 184L, 204L, 224L), inc = c("vate", "vate", "vate", "vate", 
    "vate", "vate", "vate", "vate", "vate", "vate", "vate", "vate"
    ), month_year = c("Apr-20", "May-20", "Jun-20", "Jul-20", "Aug-20", 
    "Sep-20", "Oct-20", "Nov-20", "Dec-20", "Jan-21", "Feb-21", "Mar-21"
    ), Plans = c("<p><span style=\"font-size: 10pt; font-family: Calibri, Arial;\" data-sheets-value=\"{\" data-sheets-userformat=\"{\">xxxx3</span><span style=\"font-family: Calibri, Arial; font-size: 13.3333px;\">INR6-7L</span></p>", 
    "<p><span style=\"font-size: 10pt; font-family: Calibri, Arial;\" data-sheets-value=\"{\" data-sheets-userformat=\"{\">xxxx2</span><span style=\"font-family: Calibri, Arial; font-size: 13.3333px;\">INR6-7L</span></p>", 
    "<p><span style=\"font-size: 10pt; font-family: Calibri, Arial;\" data-sheets-value=\"{\" data-sheets-userformat=\"{\">xxxx1</span><span style=\"font-family: Calibri, Arial; font-size: 13.3333px;\">INR6-7L</span></p>", 
    "<p><span style=\"font-size: 10pt; font-family: Calibri, Arial;\" data-sheets-value=\"{\" data-sheets-userformat=\"{\">zzzz<br />yyyy</span></p>", 
    "<p><span style=\"font-size: 10pt; font-family: Calibri, Arial;\" data-sheets-value=\"{\" data-sheets-userformat=\"{\">zzzz<br />yyyy</span></p>", 
    "<p><span style=\"font-size: 10pt; font-family: Calibri, Arial;\" data-sheets-value=\"{\" data-sheets-userformat=\"{\">zzzz<br />yyyy</span></p>", 
    "<p><span style=\"font-size: 10pt; font-family: Calibri, Arial;\" data-sheets-value=\"{\" data-sheets-userformat=\"{\">zzzz<br />yyyy</span></p>", 
    "<p><span style=\"font-size: 10pt; font-family: Calibri, Arial;\" data-sheets-value=\"{\" data-sheets-userformat=\"{\">zzzz<br />yyyy</span></p>", 
    "<p><span style=\"font-size: 10pt; font-family: Calibri, Arial;\" data-sheets-value=\"{\" data-sheets-userformat=\"{\">zzzz<br />yyyy</span></p>", 
    "", "", ""), Achievements = c("<p>INR12345</p>", "<p>INR45678</p>", 
    "<p>have you seen Interstellar</p>", "<p>have you seen Interstellar INR 5.81L</p>", 
    "<p>have you seen InterstellarINR3.7L</p>", "<p>have you seen breaking bad INR 6.15L</p>", 
    "<p>ave you seen breaking bad</p>", "<p>ave you seen prison break INR 4.8L range.</p>", 
    "<p>ave you seen prison break INR 4.8L range.</p>", "<p>ave you seen prison break INR 4.8L range.</p>", 
    "<p>Total expenditure of spider man no way home =INR 7.84L .</p>", 
    ""), quarter_year = c("Q1-2020", "Q1-2020", "Q1-2020", "Q2-2020", 
    "Q2-2020", "Q2-2020", "Q3-2020", "Q3-2020", "Q3-2020", "Q4-2021", 
    "Q4-2021", "Q4-2021"), date = c("01-04-2020", "01-05-2020", "01-06-2020", 
    "01-07-2020", "01-08-2020", "01-09-2020", "01-10-2020", "01-11-2020", 
    "01-12-2020", "01-01-2021", "01-02-2021", "01-03-2021"), year = c(2020L, 
    2020L, 2020L, 2020L, 2020L, 2020L, 2020L, 2020L, 2020L, 2021L, 
    2021L, 2021L)), class = "data.frame", row.names = c(NA, -12L))

    pa_q = structure(list(X = c(4L, 24L, 44L, 64L), inc = c("vate", "vate", 
    "vate", "vate"), Plans = c("<p><span style=\"font-size: 10pt; font-family: Calibri, Arial;\" data-sheets-value=\"{\" data-sheets-userformat=\"{\">A continent standing in for losses larger than itself</span></p>", 
    "<p><span style=\"font-size: 10pt; font-family: Calibri, Arial;\" data-sheets-value=\"{\" data-sheets-userformat=\"{\">as a woman who once owned a watch<br />Expected burn rate-INR7.5L</span></p>", 
    "<p><span style=\"font-size: 10pt; font-family: Calibri, Arial;\" data-sheets-value=\"{\" data-sheets-userformat=\"{\">One of the defining works of the Harlem Renaissance<br /> by its greatest poet<br />poet</span></p>", 
    "<p><span style=\"font-size: 10pt; font-family: Calibri, Arial;\" data-sheets-value=\"{\" data-sheets-userformat=\"{\">One of the defining works of the Harlem Renaissance<br /> by its greatest poet<br />poet</span></p>"
    ), Achievements = c(NA, NA, NA, NA), quarter_year = c("Q1-2020", 
    "Q2-2020", "Q3-2020", "Q4-2021"), date = c("15-06-2020", "15-09-2020", 
    "15-12-2020", "15-03-2021"), year = c(2020L, 2020L, 2020L, 2021L
    )), class = "data.frame", row.names = c(NA, -4L))

    plans_achievements <- function(pa_m,pa_q){
             if(nrow(pa_m)==0 & nrow(pa_q==0)){
                df = data.frame(a = c(""), b = c("No Data Available"))
                colnames(df)=""
              }else{
                pa_m= pa_m%>% select(inc,month_year,Plans,Achievements,quarter_year)
                colnames(pa_mon)[2] = "Period"
        
        pa_q= pa_q%>% select(inc,quarter_year,Plans,Achievements)
        colnames(pa_qtr)[2] = "Period"
        
        df = data.frame(inc=c(""),Period=c(""),Plans=c(""),Achievements=c(""))
        
        for (q in unique(pa_q$Period)){
          df1 = pa_q[pa_q$Period==q,]
          df1$Period = paste0("<span style=\"color:#288D55\">",df1$Period,"</span>")
          df1$Plans = paste0("<span style=\"color:#288D55\">",df1$Plans,"</span>")
          df1$Achievements = paste0("<span style=\"color:#288D55\">",df1$Achievements,"</span>")
          df = rbind(df,df1)
          for (m in unique(pa_m$quarter_year)){
            if(m==q){
              df2 = pa_m[pa_m$quarter_year==q,][-5]
              df = rbind(df,df2)
            }
          }
        }
        df = df[-1,]
      }
    
          return(df)
        }


DT::datatable(plans_achievements(pa_m[pa_m$inc=="vate",],pa_q[pa_q$inc=="vate",]), rownames = F,escape = FALSE,selection=list(mode="single",target="row"),options = list(pageLength = 50,scrollX = TRUE,dom = 'tp',ordering=F,columnDefs = list(list(visible=FALSE, targets=c(0)),list(className = 'dt-left', targets = '_all'))))
1
it would help a lot for you to give an example of your input and expected output. from your code it is not necessarily an apply function that you need here. - George Savva
Does df = rbind(df,df2) work? rbind errors for me when trying to bind tables of different column names - Jonny Phelps
@GeorgeSavva i updated the code with sample data and actual function - Myneed Personal
@JonnyPhelps use the edited code to avoid the errors - Myneed Personal

1 Answers

0
votes

I could not imagine why you would want to do this, what about vectorizing the function instead?

Note a few typing errors (pa_mon instead of pa_m etc.) has been corrected below

plans_achievements2 <- function(pa_m,pa_q){
    if(nrow(pa_m)==0 & nrow(pa_q==0)){
      df = data.frame(a = c(""), b = c("No Data Available"))
      colnames(df)=""
    }else{
      pa_m= pa_m%>% select(inc,month_year,Plans,Achievements,quarter_year)
      colnames(pa_m)[2] = "Period"
      
      pa_q= pa_q%>% select(inc,quarter_year,Plans,Achievements)
      colnames(pa_q)[2] = "Period"
      df <- pa_q
      df$Period <- paste0("<span style=\"color:#288D55\">",df$Period,"</span>")
      df$Plans = paste0("<span style=\"color:#288D55\">",df$Plans,"</span>")
      df$Achievements = paste0("<span style=\"color:#288D55\">",df$Achievements,"</span>")
      return(rbind(df, pa_m[pa_m$quarter_year %in% pa_q$Period,-5])[-1, ])
    }
    return(df)
  }