簡體   English   中英

tidyverse:將字符串拆分為 data.frame 作為行

[英]tidyverse: splitting string to data.frame as rows

我想將基於\n的字符串拆分為data.frame的行。 下面給出的代碼不能按要求工作。 任何提示。

library(tidyverse)
Test <- "ASD 7\nDEF \n This"

library(stringr)
str_split(string = Test, pattern = "\n")
[[1]]
[1] "ASD 7" "DEF "  " This
    
tb <- 
  as_tibble(Test) %>% 
  set_names("Test")

tb %>% 
  str_split(string = Test, pattern = "\n")
[[1]]
[1] NA

Warning message:
In stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  NAs introduced by coercion

需要 Output

ASD 7
DEF
This

str_split旨在處理原子向量而不是數據集。 它沒有作為data的參數,因此它只能像這樣工作

str_split(tb$Test, '\n')

[[1]]
[1] "ASD 7" "DEF "  " This"

或者

> tb %>%
+   mutate(chr_list = str_split(Test, '\n'))
# A tibble: 1 x 2
  Test                 chr_list 
  <chr>                <list>   
1 "ASD 7\nDEF \n This" <chr [3]>

此外,如果您喜歡在數據庫中執行此操作,您可以像這樣執行tidyr::separatetidyr::separate_rows()

tb %>%
  separate_rows(Test, sep = '\n')

# A tibble: 3 x 1
  Test   
  <chr>  
1 "ASD 7"
2 "DEF " 
3 " This"

或者

tb %>%
  separate(Test, into = c('A', 'B', 'C'), sep = '\n')

# A tibble: 1 x 3
  A     B      C      
  <chr> <chr>  <chr>  
1 ASD 7 "DEF " " This"

PS:如果你也想刪除空格,你可以使用'\\s*\n+\\s*'作為分隔模式

tb %>%
  transmute(text_data = map(str_split(Test, '\n'), ~ str_trim(.x))) %>%
  unnest_longer(text_data)

# A tibble: 3 x 1
  text_data
  <chr>    
1 ASD 7    
2 DEF      
3 This

或者

tb %>%
  separate_rows(Test, sep = "\\s*\n+\\s*")

# A tibble: 3 x 1
  Test 
  <chr>
1 ASD 7
2 DEF  
3 This

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM