0

I am trying to create a function , for that at the input i am giving a list of modifying columns . for eg: sample data is


    dataa<-data.frame(
      aa = c("q","r","y","v","g","y","d","s","n","k","y","d","s","t","n","u","l","h","x","c","q","r","y","v","g","y","d","s","n","k","y","d","s","t","n","u","l","h","x","c"),
    col1=c(1,2,3,2,1,2,3,4,4,4,5,3,4,2,1,2,5,3,2,1,2,4,2,1,3,2,1,2,3,1,2,2,4,4,4,1,2,5,3,5),
    col2=c(2,1,1,7,4,1,2,7,5,7,2,6,2,2,6,3,4,3,2,5,7,5,6,4,4,6,5,6,4,1,7,3,2,7,7,2,3,7,2,4)
    )

my requirement is like , i can create any more than one cuts like below, or can be a list of cuts may be i am trying to recode my dataset

dataa$col3 <- ifelse(dataa$aa == "y",1,0)
dataa$col4 <- ifelse(dataa$col2 == 7,1,0)

so now in my function requirement i want a subset of selected variables for calculation. for eg:

#i am applying my function like this
dat1 = dataa
var1 = "col1" # variable for which calculation will be done
grouping_var = list(dataa$col3,dataa$col4)
total_var= TRUE

#fun_1 <- function(dat1,var1,grouping_var,total_var){
  total_col <- ifelse(total_var== TRUE,1,0)
  var1 <- rlang::parse_expr(var1)
  var2 <- dat1[unlist(grouping_var)] # i am trying to create a subset dataframe of selected grouping_var
  #var2 <- data.frame(sapply(grouping_var,c)) # i have tried this too
  
  dat1 <- dat1 %>% select(!!var1,!!var2) 
# so after this line i would have a subset to calculations accordingly
var_lab(dat1[[1]]) <- ""
  var_lab(dat1[[2]]) <- ""
  tab1 <- expss::cro_cpct(total(),dat1[[1]],dat1[[2]])
  tab1 <- as.data.frame(tab1)
#}
 

1 Answer 1

1

It is not possible to select columns based on the values of the column.

An easy way would be to pass them as character vector and select. Try :

dat1 = dataa
var1 = "col1" 
grouping_var = c('col3', 'col4') #Passing columns as character vector
total_var= TRUE

#fun_1 <- function(dat1,var1,grouping_var,total_var){
total_col <- as.integer(total_var)
#total_col <- ifelse(total_var== TRUE,1,0)
dat1 <- dat1[grouping_var]
expss::var_lab(dat1[[1]]) <- ""
expss::var_lab(dat1[[2]]) <- ""
tab1 <- expss::cro_cpct(expss::total(),dat1[[1]],dat1[[2]])
tab1 <- as.data.frame(tab1)

#}
Sign up to request clarification or add additional context in comments.

8 Comments

Thanks Ronak, i am getting error below > dat1 <- dat1 %>% select(!!var1,!!var2) Error: Must subset columns with a valid subscript vector. x Subscript has the wrong type data.frame< col3: double col4: double >. i It must be numeric or character.
I don't have that line in my code. I have removed it. You don't need select since we are doing var2 <- dat1[grouping_var].
actually it required that line , because in that line i am trying to create a subset so that that i can apply tab1 <- expss::cro_cpct(total(),dat1[[1]],dat1[[2]]) dat1[[1]] # 1st column in subset dataset dat1[[2]] # all grouping variables
Use dat1 <- dat1[grouping_var] to subset the dataframe dat1. You don't need var1, var2`. Check updated answer.
still doesn't work...may i am not able to make you understand everything
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.