r-为不同的数据帧列表动态标记



我正在尝试创建一个自定义函数,为修改后的数据帧列表提供标签。例如,我有一个数据帧,如下所示。

data<-data.frame( Q1=c(1,1,NA,NA,NA,NA,NA,NA,1,NA,NA,NA,NA,NA,NA,NA,NA,1,NA,NA,NA,1,1,1,NA,1,1,NA,NA,NA,NA,1,NA,NA,NA,NA,1,NA,1),
Q2=c(1,1,1,1,1,NA,NA,NA,NA,1,1,1,1,1,NA,NA,NA,1,1,1,NA,1,1,1,1,1,NA,NA,NA,1,1,1,1,1,1,1,NA,NA,NA),
Q3=c(1,1,NA,NA,NA,NA,NA,1,NA,NA,NA,NA,NA,NA,NA,NA,1,NA,NA,NA,NA,NA,1,1,1,NA,NA,NA,1,NA,NA,1,1,1,1,1,NA,NA,1),
Q4=c(1,NA,NA,NA,NA,NA,NA,NA,NA,NA,1,NA,NA,NA,NA,NA,NA,NA,1,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA),
Q5=c(NA,1,NA,NA,1,NA,1,1,NA,NA,1,NA,1,1,NA,1,NA,1,1,NA,1,NA,NA,1,NA,NA,1,NA,1,NA,NA,1,NA,1,NA,1,NA,1,NA),
Q6=c(1,NA,1,NA,NA,1,NA,NA,1,NA,1,NA,1,1,NA,1,1,NA,1,NA,1,1,NA,1,NA,1,1,1,1,1,1,1,NA,1,NA,1,1,NA,1),
Q7=c(NA,1,1,NA,1,NA,1,1,NA,NA,1,1,NA,NA,NA,1,1,NA,1,NA,1,1,NA,1,NA,1,NA,1,NA,1,NA,1,NA,1,NA,NA,1,1,NA),
Q8=c(NA,1,1,NA,1,NA,1,1,NA,NA,1,1,NA,NA,NA,1,1,NA,1,NA,1,1,NA,1,NA,1,NA,1,NA,1,NA,1,NA,1,NA,NA,1,1,NA),
region=c(1,2,1,1,1,2,1,2,2,1,2,NA,1,1,2,2,2,1,1,1,2,NA,2,1,1,1,2,2,2,NA,1,2,2,1,1,1,2,2,2)
)  
conv_fac <- function(
dataset, # list containing input dataframes
labels   # list of vectors; in each vector, first label is destination column and all the rest are sources
){
for (i in seq_len(length(dataset))){
this_df <- dataset[[i]]
for (this_label in labels){
col_target <- this_label[1]
cols_source <- this_label[-1]
vecs <- this_df[,cols_source]
cat('nProcessing dataframe #',i,': column ',col_target, ' from columns ', paste0(cols_source, collapse = ', '),  sep = '')      
this_df[[col_target]] <- coalesce(!!!vecs) 
}
this_df -> dataset[[i]]
}
return(dataset)
}
# Usage:
ldat <- list("ALL" = df, "other" =df2) 
var1 <- c("Q9","Q8","Q4")
var2 <- c("Q7","Q6","Q5")
ldat2 <- conv_fac(dataset = ldat, labels = list(var1,var2))

最新更新