Как переставить ряды? - PullRequest
0 голосов
/ 08 апреля 2019

Мой файл имеет следующий формат -

Gene | GO

Bcin01g00010|               GO:0016491 (MF: oxidoreductase  activity),GO:0003824 (MF: catalytic activity),GO:0050662^MF^coenzyme   binding

Я бы хотел почистить его так, чтобы оно выглядело так -

Bcin01g00010|GO:0016491 (MF: oxidoreductase activity)

Bcin01g00010|GO:0003824 (MF: catalytic activity)

Bcin01g00010|GO:0050662^MF^coenzyme binding

Любая помощь будет оценена.

Ответы [ 3 ]

0 голосов
/ 08 апреля 2019

Вы можете разделить текст по своему усмотрению,

p1 <- strsplit(text, "[,|\n]")
p2 <- lapply(p1, trimws)
p3 <- p2[[1]][which(p2[[1]] != "")]
col_names <- p3[1:2]
gene_type <- p3[3]
values <- p3[4:6]

gene.table <- data.frame(Gene = rep(gene_type, length(values)), GO = values)

Вы можете создать функцию для этого и затем использовать функции apply, если у вас несколько строк.

0 голосов
/ 08 апреля 2019

Трудно ответить без дополнительной информации о ваших данных и желаемом выводе, но он гибкий и должен помочь вам начать. Предполагается, что у вас есть несколько генов, у вашего гена всегда есть |, отделяющий его от столбца GO, а столбцы GO разделены запятыми. Удачи!

library(stringi)

text <- "Bcin01g00010|               GO:0016491 (MF: oxidoreductase  activity),GO:0003824 (MF: catalytic activity),GO:0050662^MF^coenzyme   binding"

# Removing spaces
normal_spaces <- stri_replace_all_regex(text, replacement = " ", pattern = "\\s+")

# Separating the gene name
split_on_vbar <- stri_split_regex(normal_spaces, "\\|", simplify = T)

# Removing white space from the string
split_on_vbar <- trimws(split_on_vbar)

# Pasting the gene name onto the "go" anf the output is a vector
formatted_vector <- paste(split_on_vbar[,1], stri_split_fixed(split_on_vbar[,2], ",", simplify = T), sep = "|")
formatted_vector
[1] "Bcin01g00010|GO:0016491 (MF: oxidoreductase activity)" "Bcin01g00010|GO:0003824 (MF: catalytic activity)"     
[3] "Bcin01g00010|GO:0050662^MF^coenzyme binding" 


# Assuming you want a dataframe...
df1 <- as.data.frame(stri_split_fixed(formatted_vector, "|", simplify = T))

names(df1) <- c("Gene", "GO")

df1
          Gene                                       GO
1 Bcin01g00010 GO:0016491 (MF: oxidoreductase activity)
2 Bcin01g00010      GO:0003824 (MF: catalytic activity)
3 Bcin01g00010           GO:0050662^MF^coenzyme binding
0 голосов
/ 08 апреля 2019

Если строк мало, вы можете сделать это «вручную» следующим образом:

# Change the comma with a "return to the line" (/n) and with the name of your gene "Bcin01g00010|"
# You can change the last part with your file
Goterm <- gsub(",", "\nBcin01g00010|", "Bcin01g00010| GO:0016491 (MF: oxidoreductase activity),GO:0003824 (MF: catalytic activity),GO:0050662^MF^coenzyme binding")
# Change /n with a "real" return to the line
cat(Goterm)

Это именно то, что вы хотите, но если у вас много строк, вы можете сделать это в цикле.

Однако, когда вы аннотировали свой файл с помощью терминов Go, обычно вы можете попросить программу напрямую упорядочить ваш файл так, как вы хотите (например, с Blast2Go).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...