【问题标题】:How can I apply str_split to a tibble with one character column?如何将 str_split 应用于具有一个字符列的小标题?
【发布时间】:2020-03-05 01:32:21
【问题描述】:

假设我有一个包含一个字符列的 tibble 对象;我想通过使用 str_split 函数转换为 target 。我不能成功。有什么建议吗?

> as_tibble(c("sdsd/ffg","fdfd/rrrr/rrr","dfd/ww/rrr/ww"))%>%str_split("/")
[[1]]
[1] "c(\"sdsd"      "ffg\", \"fdfd" "rrrr"          "rrr\", \"dfd"  "ww"           
[6] "rrr"           "ww\")"        

Warning message:
In stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
> target <- str_split(c("sdsd/ffg","fdfd/rrrr/rrr","dfd/ww/rrr/ww"),"/")
> target
[[1]]
[1] "sdsd" "ffg" 

[[2]]
[1] "fdfd" "rrrr" "rrr" 

[[3]]
[1] "dfd" "ww"  "rrr" "ww" 

【问题讨论】:

  • 当你把它变成一个 tibble 时,它​​就像一个 data.frame。使用as_tibble(c("sdsd/ffg","fdfd/rrrr/rrr","dfd/ww/rrr/ww"))$value %&gt;% str_split("/")(因为它调用它的唯一列'值')
  • 请说明您是否想要一个小标题作为输出?如果是这样,我想您想将斜杠分隔的字符串拆分为一组固定的列,因为给定 tibble 中的所有行都必须具有相同的列。也许编辑您的问题以呈现预期结果会有所帮助。

标签: r tidyverse strsplit


【解决方案1】:

您可以pull 将该列作为向量获取,然后应用str_split

tibble::as_tibble(c("sdsd/ffg","fdfd/rrrr/rrr","dfd/ww/rrr/ww")) %>% 
    dplyr::pull(value) %>%
    stringr::str_split("/")

#[[1]]
#[1] "sdsd" "ffg" 

#[[2]]
#[1] "fdfd" "rrrr" "rrr" 

#[[3]]
#[1] "dfd" "ww"  "rrr" "ww" 

【讨论】:

    【解决方案2】:

    我们可以在mutate 中执行str_split,它返回一个list 列,然后可以用value 提取

    library(dplyr)
    library(stringr)
    as_tibble(c("sdsd/ffg","fdfd/rrrr/rrr","dfd/ww/rrr/ww")) %>%
        mutate(value = str_split(value, "/")) %>%
        pull(value)
    #[[1]]
    #[1] "sdsd" "ffg" 
    
    #[[2]]
    #[1] "fdfd" "rrrr" "rrr" 
    
    #[[3]]
    #[1] "dfd" "ww"  "rrr" "ww" 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多