Как добавить пробел для каждых двух символов в кадре данных - PullRequest
3 голосов
/ 23 сентября 2019

У меня есть большой фрейм данных, где мне нужно добавлять пробел после каждых двух символов.Например (сначала у меня есть только один столбец x 2 строки):

          V1
AAAAGGCCCCCC
00AACGAACCAA

То, что я хочу (теперь это будет 6 столбцов x 2 строки):

V1 V2 V3 V4 V5 V6      
AA AA GG CC CC CC
00 AA CG AA CC AA

У кого-нибудь есть идеи?

Ответы [ 4 ]

3 голосов
/ 23 сентября 2019

Добавьте запятую в конце каждой пары символов, а затем разделите ее запятой

data.frame(do.call(rbind, strsplit(gsub("(..)", "\\1,", d$V1), ",")))
#  X1 X2 X3 X4 X5 X6
#1 AA AA GG CC CC CC
#2 00 AA CG AA CC AA

ДАННЫЕ

d = data.frame(V1 = c("AAAAGGCCCCCC", "00AACGAACCAA"))
2 голосов
/ 24 сентября 2019

Просто каракули в tidyr (используя данные @d.b's):

tidyr::separate(df1, V1, c("V1","V2","V3","V4","V5","V6"), 
                         sep = seq(2, nchar(as.character(df1$V1[1])), by = 2))

 #    V1 V2 V3 V4 V5 V5
 # 1: AA AA GG CC CC CC
 # 2: 00 AA CG AA CC AA
2 голосов
/ 24 сентября 2019

Вот еще один вариант с strsplit с регулярным выражением для разделения на каждые 2 символа

do.call(rbind, strsplit(df1$V1, "(?<=..)", perl = TRUE))
#  [,1] [,2] [,3] [,4] [,5] [,6]
#[1,] "AA" "AA" "GG" "CC" "CC" "CC"
#[2,] "00" "AA" "CG" "AA" "CC" "AA"

Обтекание data.frame, если нам нужен data.frame вывод


Или другой вариант - read.fwf и укажите widths аргумент

read.fwf(file = textConnection(df1$V1), widths = rep(2, 6))
#  V1 V2 V3 V4 V5 V6
#1 AA AA GG CC CC CC
#2 00 AA CG AA CC AA

data

df1 <- structure(list(V1 = c("AAAAGGCCCCCC", "00AACGAACCAA")),
        class = "data.frame", row.names = c(NA, 
-2L))
1 голос
/ 24 сентября 2019

Другое решение с базовым R, использующее substr и немного подсчета:

sapply(plouf,function(vec){
  sapply(1:(nchar(vec)/2),function(x){substr(vec, 2*x-1, 2*x)})
}) %>% 
  t() %>%
  as.data.frame()%>%
  `colnames<-`(paste0("V",1:(nchar(plouf[1])/2) ))%>%
  `rownames<-`(NULL)

  V1 V2 V3 V4 V5 V6
1 AA AA GG CC CC CC
2 00 AA CG AA CC AA

data

plouf <- c("AAAAGGCCCCCC","00AACGAACCAA")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...