首页 > 解决方案 > 从数据框中选择列列表以转换为子集

问题描述

我正在尝试创建一个函数,为此在输入时我给出了一个修改列的列表。例如:样本数据是


    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)
    )

我的要求是,我可以创建多个剪辑,如下所示,或者可以是一个剪辑列表,可能是我正在尝试重新编码我的数据集

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

所以现在在我的功能要求中,我想要一个选定变量的子集进行计算。例如:

#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)
#}
 

标签: r

解决方案


无法根据列的值选择列。

一种简单的方法是将它们作为字符向量传递并选择。尝试 :

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)

#}

推荐阅读