簡體   English   中英

按每個字符將字符串分隔成列

[英]Separate string to columns by each character

在我的數據框中,我有一列這樣的長字符串

df$string 
AVDSFBKLDF

我需要的是分隔每個字符並為其創建新列。 列的名稱是q1,q2,依此類推。 對於類似的情況,例如按符號分割字符串並將其放入新列中,我使用了此代碼

df %>% separate(string, into = paste0('q', 1:10), sep = "")

它工作正常,但是現在當我想按每個字符分割字符串時,控制台出現空白警告,我的代碼不起作用。

data.table包提供您可能考慮的功能tstrsplit

a<- c("AVDSFBKLDF", "GH", "ABCD")

library(data.table)
DT <- data.table(a)
DT_wide <- DT[, tstrsplit(a, "")]

# change column names
setnames(DT_wide, paste0("q", seq_len(ncol(DT_wide))))
DT_wide
#   q1 q2   q3   q4   q5   q6   q7   q8   q9  q10
#1:  A  V    D    S    F    B    K    L    D    F
#2:  G  H <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
#3:  A  B    C    D <NA> <NA> <NA> <NA> <NA> <NA>

如果要繼續使用數據setDF(DT_wide) ,請在最后鍵入setDF(DT_wide)

使用下面的代碼。 我已經使用了Stringr包的str_split_fixed函數來創建新列。

a<- c("AVDSFBKLDF")

library(stringr)
d<- data.frame(str_split_fixed(a, "", max(nchar(a))))

我希望這有幫助

您可以嘗試:

df<- data.frame(string=c("ABCDEF","GH"))
df %>% mutate(v=str_split(string,"(?=.)")) %>% unnest %>%
  filter(v!="") %>% 
  group_by(string) %>% mutate(k=paste0("q",row_number())) %>% ungroup %>%
  spread(k,v) 
## A tibble: 2 x 7
#  string q1    q2    q3    q4    q5    q6   
#  <fct>  <chr> <chr> <chr> <chr> <chr> <chr>
#1 ABCDEF A     B     C     D     E     F    
#2 GH     G     H     <NA>  <NA>  <NA>  <NA>

暫無
暫無

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

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