将字符串列拆分为几列 - 保留空条目

Splitting string column into a few columns - keep the null entries

亲爱的互联网好心人,我需要帮助。我正在尝试将一个字符串列拆分为多个列并保留 null/NA 个条目。

df <- cSplit(df, "question", "_")

此代码当前将它们拆分,但会删除空条目并显示以下预热消息:

Warning messages:
1: In type.convert.default(X[[i]], ...) :
  'as.is' should be specified by the caller; using TRUE

df

client_id   question
15962       eng_child_pregnancy_standard_focused
15963       null
15964       xho_child_developed_sleep
15965       eng_mother_spacing_other
15966       null
15967       null

当前拆分 df 使用以上代码:

client_id   question       question_2      question_3      question_4     question_5
15962       eng            child           pregnancy       standard      focused
15964       xho            child           developed       sleep         NA
15965       eng            mother          spacing         other         NA

如何保留空条目以及警告是什么意思?

?cSplit,我们可以看到函数中有一个 type.convert 参数,它会改变每列结果的类型(即确定该列是否应该是数字,逻辑或字符)。关于 as.is 的警告消息来自 utils::type.convert() 函数,如果 type.convert 设置为 TRUE.

则使用该函数

因此要避免出现该消息,请使用 type.convert = FALSE

library(splitstackshape)

cSplit(df, "question", "_", type.convert = FALSE)

一个 tidyverse 解决方案是

library(tidyverse)
cols <- paste0("question_", 1:5)
df %>% separate(question, sep = "_", into = cols )

给出

# A tibble: 6 x 6
  client_id question_1 question_2 question_3 question_4 question_5
      <dbl> <chr>      <chr>      <chr>      <chr>      <chr>     
1     15962 eng        child      pregnancy  standard   focused   
2     15963 null       NA         NA         NA         NA        
3     15964 xho        child      developed  sleep      NA        
4     15965 eng        mother     spacing    other      NA        
5     15966 null       NA         NA         NA         NA        
6     15967 null       NA         NA         NA         NA