【问题标题】:labeling dynamically for different list of data frames为不同的数据框列表动态标记
【发布时间】:2020-10-28 17:12:11
【问题描述】:

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

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

【问题讨论】:

  • 你的例子的开头data定义丢失了
  • 不清楚您的函数应该将什么作为工作数据:在您的 coalesce() 示例中,您正在修改数据框 (data),但在您的 conv_fac() 调用示例中,您似乎使用dfdf2 数据帧传递列表。
  • 我刚刚更新了问题
  • 再次,尚不清楚您的函数需要什么输入。它是 2 个数据帧的列表,并且它们的处理方式与您的示例中的 data 相同吗?它们是否应该始终命名为 ALLother

标签: r function dplyr


【解决方案1】:
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))

【讨论】:

  • 所以 ldat 可以是许多数据帧的列表,有很多块必须为 n 个变量列表标记
  • 是的,我提供的代码适用于 dataset 列表输入中包含的所有数据帧
  • 对于像因子和标签列表这样的场景 col_name
  • 这对我来说有点复杂
  • 正如我所说,从您的问题中不清楚需要什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-27
  • 2015-04-22
  • 2017-11-15
相关资源
最近更新 更多