簡體   English   中英

每兩個字符多次拆分字符串

[英]Split character string multiple times every two characters

我的數據框中有一個字符列,看起來像

df<-
  data.frame(a=c("AaBbCC","AABBCC","AAbbCC"))#df
       a
1 AaBbCC
2 AABBCC
3 AAbbCC

我想每兩個字符拆分此列。 所以在這種情況下,我想獲得名為VA,VB,VC的三列。 我試過

library(tidyr)
library(dplyr)
df<-
  data.frame(a=c("AaBbCC","AABBCC","AAbbCC"))%>%
  separate(a,c(paste("V",LETTERS[1:3],sep="")),sep=c(2,2))
 VA VB   VC
1 Aa    BbCC
2 AA    BBCC
3 AA    bbCC

但這不是想要的結果。 我喜歡將現在在VC中的結果拆分為VB (所有字母 B)和VC (所有字母 C)如何讓 R 拆分每兩個字符。 列中字符串的長度對於每一行始終相同(在本例中為 6)。 我將擁有長度 >10 的字符串。

你實際上非常接近。 您需要將分隔符位置指定為sep = c(2,4)而不是sep = c(2,2)

df <- separate(df, a, c(paste0("V",LETTERS[1:3])), sep = c(2,4))

你得到:

 > df VA VB VC 1 Aa Bb CC 2 AA BB CC 3 AA bb CC

在 base R 中你可以這樣做(借用@rawr 的評論):

l <- ave(as.character(df$a), FUN = function(x) strsplit(x, '(?<=..)', perl = TRUE))
df <- data.frame(do.call('rbind', l))

這使:

 > df X1 X2 X3 1 Aa Bb CC 2 AA BB CC 3 AA bb CC

我們可以用base R做到這一點

read.csv(text=gsub('(..)(?!$)', '\\1,', df$a, 
    perl=TRUE),col.names=paste0("V", LETTERS[1:3]), header=FALSE)
#  VA VB VC
#1 Aa Bb CC
#2 AA BB CC
#3 AA bb CC

如果我們直接從文件中讀取,另一個選項是read.fwf

read.fwf(file="yourfile.txt", widths=c(2,2,2), skip=1)

暫無
暫無

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

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