【问题标题】:Expanding Delimited Data in a Column into Multiple Logical Columns将列中的分隔数据扩展为多个逻辑列
【发布时间】:2017-06-23 17:13:41
【问题描述】:

我在data.frame 中有一个列,其中包含来自一系列复选框的数据。当我收到数据时,它会被塞进一个看起来像这样的列中:

choice1|choice3|choice6

对于复制: my.data <- data.frame(checkboxes="choice1|choice3|choice6", stringsAsFactors = FALSE)

这样的值的数量是离散的,用管道分隔。

我想将此数据转换为一系列以可能的选择命名的逻辑列,如下所示:

choice1 choice2 choice3 choice4 choice5 choice6 
TRUE    FALSE   TRUE    FALSE   FALSE   TRUE

我尝试了separate(),但它不太适合我的用例。我的用例似乎是重塑和separate() 的混合体。

我如何在 R 中实现这一点?

【问题讨论】:

  • 请提供您的数据框的可重现样本
  • @Aurèle Yikes!我会仔细看看。我原以为会更容易。它可能接近我所需要的。必须在早上尝试。

标签: r


【解决方案1】:

另一种可能性,本着同样的精神:

parsed_checkboxes <- strsplit(my.data$checkboxes, "|", fixed = TRUE)
as.data.frame(lapply(
  setNames(nm = paste0("choice", 1:6)),
  function(choice) vapply(parsed_checkboxes, "%in%", logical(1), x = choice)
))

##   choice1 choice2 choice3 choice4 choice5 choice6
## 1    TRUE   FALSE    TRUE   FALSE   FALSE    TRUE

【讨论】:

    【解决方案2】:

    您想结合使用 strsplit 和 apply 函数,这是一种方法:

    library("magrittr")
    
    possible_choices <- c("choice1","choice2","choice3","choice4","choice5","choice6")
    df1 <- data.frame(choices =c("choice1|choice3|choice6","choice1|choice2|choice3"),stringsAsFactors = FALSE)
    
    # > df1
    # choices
    # 1 choice1|choice3|choice6
    # 2 choice1|choice2|choice3
    
    output <- df1$choices %>% 
      strsplit("\\|") %>% 
      lapply(. %>% sapply(`==`,possible_choices)) %>% 
      lapply(. %>% apply(1,any)) %>% 
      do.call(rbind,.) %>%
      as.data.frame %>%
      setNames(possible_choices)
    
    # choice1 choice2 choice3 choice4 choice5 choice6
    # 1    TRUE   FALSE    TRUE   FALSE   FALSE    TRUE
    # 2    TRUE    TRUE    TRUE   FALSE   FALSE   FALSE
    

    【讨论】:

      猜你喜欢
      • 2022-01-19
      • 1970-01-01
      • 2021-02-02
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多