r - 每两个字符多次分割字符串

标签 r string dataframe tidyr

我的数据框中有一个字符列,看起来像

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
<小时/>

在基础 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

关于r - 每两个字符多次分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34695136/

相关文章:

python - 根据其组重新定义 pandas 数据框

r - cbind 2个具有不同行数的数据帧

用 ddply 或 ply-family 函数的创造性使用替换 R 循环

r - 在 R 中查找每个分组的新观察值

c++ - 在字符串中输出数据

c++ - 在 C++ 中解析和比较 IP 地址

Javascript 回调或返回字符串

python - 根据python中的自定义函数聚合数据框中的每一列

r - 集成直方图和密度曲线,一轴为频率,另一轴为密度

r - 使用 dplyr 包 R 改变 data.frame 或 tibble 中的选定列