我的数据框中有一个字符列,看起来像
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