Remplacer la liste des caractères par une séquence de flottants basée sur la trame de données de mappage
J'ai une trame de données de cartographie et une grande trame de données où chaque ligne représente une protéine avec sa séquence.
Je veux un moyen efficace de mapper les séquences aux valeurs correspondant à l'acide aminé en fonction de la trame de données de cartographie.
J'ai pu parcourir la séquence et la remplacer par le code suivant :
calcStickiness <- function(seq) {
seq_iter <- strsplit(unlist(seq), "")[[1]]
transformed_seq <- c()
for (c in seq_iter) {
transformed_seq <- c(transformed_seq, stickiness_tabel[stickiness_tabel["X"] == c][2])
}
print(transformed_seq)
}
# calling the function
calcStickiness(row["sequence_full"][1])
Où stickiness_tabel
est :
structure(list(X = c("K", "E", "D", "N", "Q", "S", "P", "R",
"T", "H", "A", "G", "M", "V", "L", "I", "F", "C", "Y", "W"),
x = c(-1.25639466063649, -0.928687786101206, -0.700106643211895,
-0.356971499674196, -0.295054350932285, -0.209468209138379,
-0.177787659972006, -0.0892949396458573, 0.0576667944592403,
0.215277407729333, 0.263739398989502, 0.556792734365241,
0.7448899445842, 0.900506232741908, 1.06680680601946, 1.18416532767113,
1.68723510186035, 1.70109173545121, 1.70150269278206, 2.01452547017961
)), class = "data.frame", row.names = c(NA, -20L))
Je voulais savoir s'il existe un moyen plus rapide de le faire car la trame de données de ma séquence contient de nombreuses entrées.
Une ligne simple de la trame de données est :
structure(list(X = 1L, code = "12as_1", nsub2 = 2L, pdb_error2 = "NO",
QSBIO_err_prob = 3.5, chain_name = "B", sequence_full = "MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQAPILSRVGDGTQDNLSGAEKAVQVKVKALPDAQFEVVHSLAKWKRQTLGQHDFSAGEGLYTHMKALRPDEDRLSPLHSVYVDQWDWERVMGDGERQFSTLKSTVEAIWAGIKATEAAVSEEFGLAPFLPDQIHFVHSQELLSRYPDLDAKGRERAIAKDLGAVFLVGIGGKLSDGHRHDVRAPDYDDWSTPSELGHAGLNGDILVWNPVLEDAFELSSMGIRVDADTLKHQLALTGDEDRLELEWHQALLRGEMPQTIGGGIGQSRLTMLLLQLPHIGQVQAGVWPAAVRESVPSLL"), row.names = 1L, class = "data.frame")
Où je suis intéressé sequence_full
.
Éditer
pour la ligne suivante :
MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQAPILSRVGDGTQDNLSGAEKAVQVKVKALPDAQFEVVHSLAKWKRQTLGQHDFSAGEGLYTHMKALRPDEDRLSPLHSVYVDQWDWERVMGDGERQFSTLKSTVEAIWAGIKATEAAVSEEFGLAPFLPDQIHFVHSQELLSRYPDLDAKGRERAIAKDLGAVFLVGIGGKLSDGHRHDVRAPDYDDWSTPSELGHAGLNGDILVWNPVLEDAFELSSMGIRVDADTLKHQLALTGDEDRLELEWHQALLRGEMPQTIGGGIGQSRLTMLLLQLPHIGQVQAGVWPAAVRESVPSLL
Je veux obtenir quelque chose comme :
[1] " 0.74488994" "-1.25639466" " 0.05766679" " 0.26373940" " 1.70150269" " 1.18416533" " 0.26373940" "-1.25639466" "-0.29505435"
[10] "-0.08929494" "-0.29505435" " 1.18416533" "-0.20946821" " 1.68723510" " 0.90050623" "-1.25639466" "-0.20946821" " 0.21527741"
[19] " 1.68723510" "-0.20946821" "-0.08929494" "-0.29505435" " 1.06680681" "-0.92868779" "-0.92868779" "-0.08929494" " 1.06680681"
[28] " 0.55679273" " 1.06680681" " 1.18416533" "-0.92868779" " 0.90050623" "-0.29505435" " 0.26373940" "-0.17778766" " 1.18416533"
[37] " 1.06680681" "-0.20946821" "-0.08929494" " 0.90050623" " 0.55679273" "-0.70010664" " 0.55679273" " 0.05766679" "-0.29505435"
[46] "-0.70010664" "-0.35697150" " 1.06680681" "-0.20946821" " 0.55679273" " 0.26373940" "-0.92868779" "-1.25639466" " 0.26373940"
[55] " 0.90050623" "-0.29505435" " 0.90050623" "-1.25639466" " 0.90050623" "-1.25639466" " 0.26373940" " 1.06680681" "-0.17778766"
[64] "-0.70010664" " 0.26373940" "-0.29505435" " 1.68723510" "-0.92868779" " 0.90050623" " 0.90050623" " 0.21527741" "-0.20946821"
[73] " 1.06680681" " 0.26373940" "-1.25639466" " 2.01452547" "-1.25639466" "-0.08929494" "-0.29505435" " 0.05766679" " 1.06680681"
[82] " 0.55679273" "-0.29505435" " 0.21527741" "-0.70010664" " 1.68723510" "-0.20946821" " 0.26373940" " 0.55679273" "-0.92868779"
[91] " 0.55679273" " 1.06680681" " 1.70150269" " 0.05766679" " 0.21527741" " 0.74488994" "-1.25639466" " 0.26373940" " 1.06680681"
[100] "-0.08929494" "-0.17778766" "-0.70010664" "-0.92868779" "-0.70010664" "-0.08929494" " 1.06680681" "-0.20946821" "-0.17778766"
[109] " 1.06680681" " 0.21527741" "-0.20946821" " 0.90050623" " 1.70150269" " 0.90050623" "-0.70010664" "-0.29505435" " 2.01452547"
[118] "-0.70010664" " 2.01452547" "-0.92868779" "-0.08929494" " 0.90050623" " 0.74488994" " 0.55679273" "-0.70010664" " 0.55679273"
[127] "-0.92868779" "-0.08929494" "-0.29505435" " 1.68723510" "-0.20946821" " 0.05766679" " 1.06680681" "-1.25639466" "-0.20946821"
[136] " 0.05766679" " 0.90050623" "-0.92868779" " 0.26373940" " 1.18416533" " 2.01452547" " 0.26373940" " 0.55679273" " 1.18416533"
[145] "-1.25639466" " 0.26373940" " 0.05766679" "-0.92868779" " 0.26373940" " 0.26373940" " 0.90050623" "-0.20946821" "-0.92868779"
[154] "-0.92868779" " 1.68723510" " 0.55679273" " 1.06680681" " 0.26373940" "-0.17778766" " 1.68723510" " 1.06680681" "-0.17778766"
[163] "-0.70010664" "-0.29505435" " 1.18416533" " 0.21527741" " 1.68723510" " 0.90050623" " 0.21527741" "-0.20946821" "-0.29505435"
[172] "-0.92868779" " 1.06680681" " 1.06680681" "-0.20946821" "-0.08929494" " 1.70150269" "-0.17778766" "-0.70010664" " 1.06680681"
[181] "-0.70010664" " 0.26373940" "-1.25639466" " 0.55679273" "-0.08929494" "-0.92868779" "-0.08929494" " 0.26373940" " 1.18416533"
[190] " 0.26373940" "-1.25639466" "-0.70010664" " 1.06680681" " 0.55679273" " 0.26373940" " 0.90050623" " 1.68723510" " 1.06680681"
[199] " 0.90050623" " 0.55679273" " 1.18416533" " 0.55679273" " 0.55679273" "-1.25639466" " 1.06680681" "-0.20946821" "-0.70010664"
[208] " 0.55679273" " 0.21527741" "-0.08929494" " 0.21527741" "-0.70010664" " 0.90050623" "-0.08929494" " 0.26373940" "-0.17778766"
[217] "-0.70010664" " 1.70150269" "-0.70010664" "-0.70010664" " 2.01452547" "-0.20946821" " 0.05766679" "-0.17778766" "-0.20946821"
[226] "-0.92868779" " 1.06680681" " 0.55679273" " 0.21527741" " 0.26373940" " 0.55679273" " 1.06680681" "-0.35697150" " 0.55679273"
[235] "-0.70010664" " 1.18416533" " 1.06680681" " 0.90050623" " 2.01452547" "-0.35697150" "-0.17778766" " 0.90050623" " 1.06680681"
[244] "-0.92868779" "-0.70010664" " 0.26373940" " 1.68723510" "-0.92868779" " 1.06680681" "-0.20946821" "-0.20946821" " 0.74488994"
[253] " 0.55679273" " 1.18416533" "-0.08929494" " 0.90050623" "-0.70010664" " 0.26373940" "-0.70010664" " 0.05766679" " 1.06680681"
[262] "-1.25639466" " 0.21527741" "-0.29505435" " 1.06680681" " 0.26373940" " 1.06680681" " 0.05766679" " 0.55679273" "-0.70010664"
[271] "-0.92868779" "-0.70010664" "-0.08929494" " 1.06680681" "-0.92868779" " 1.06680681" "-0.92868779" " 2.01452547" " 0.21527741"
[280] "-0.29505435" " 0.26373940" " 1.06680681" " 1.06680681" "-0.08929494" " 0.55679273" "-0.92868779" " 0.74488994" "-0.17778766"
[289] "-0.29505435" " 0.05766679" " 1.18416533" " 0.55679273" " 0.55679273" " 0.55679273" " 1.18416533" " 0.55679273" "-0.29505435"
[298] "-0.20946821" "-0.08929494" " 1.06680681" " 0.05766679" " 0.74488994" " 1.06680681" " 1.06680681" " 1.06680681" "-0.29505435"
[307] " 1.06680681" "-0.17778766" " 0.21527741" " 1.18416533" " 0.55679273" "-0.29505435" " 0.90050623" "-0.29505435" " 0.26373940"
[316] " 0.55679273" " 0.90050623" " 2.01452547" "-0.17778766" " 0.26373940" " 0.26373940" " 0.90050623" "-0.08929494" "-0.92868779"
[325] "-0.20946821" " 0.90050623" "-0.17778766" "-0.20946821" " 1.06680681" " 1.06680681"
La sortie doit ensuite être exportée vers un fichier.
Réponses
J'ai appelé les données de la même manière que vous:
stickiness_tabel <- structure(list(X = c("K", "E", "D", "N", "Q", "S", "P", "R",
"T", "H", "A", "G", "M", "V", "L", "I", "F", "C", "Y", "W"),
x = c(-1.25639466063649, -0.928687786101206, -0.700106643211895,
-0.356971499674196, -0.295054350932285, -0.209468209138379,
-0.177787659972006, -0.0892949396458573, 0.0576667944592403,
0.215277407729333, 0.263739398989502, 0.556792734365241,
0.7448899445842, 0.900506232741908, 1.06680680601946, 1.18416532767113,
1.68723510186035, 1.70109173545121, 1.70150269278206, 2.01452547017961
)), class = "data.frame", row.names = c(NA, -20L))
row <- structure(list(X = 1L, code = "12as_1", nsub2 = 2L, pdb_error2 = "NO",
QSBIO_err_prob = 3.5, chain_name = "B", sequence_full = "MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQAPILSRVGDGTQDNLSGAEKAVQVKVKALPDAQFEVVHSLAKWKRQTLGQHDFSAGEGLYTHMKALRPDEDRLSPLHSVYVDQWDWERVMGDGERQFSTLKSTVEAIWAGIKATEAAVSEEFGLAPFLPDQIHFVHSQELLSRYPDLDAKGRERAIAKDLGAVFLVGIGGKLSDGHRHDVRAPDYDDWSTPSELGHAGLNGDILVWNPVLEDAFELSSMGIRVDADTLKHQLALTGDEDRLELEWHQALLRGEMPQTIGGGIGQSRLTMLLLQLPHIGQVQAGVWPAAVRESVPSLL"), row.names = 1L, class = "data.frame")
Maintenant, ce que vous pourriez faire est ceci :
stickiness <- setNames(stickiness_tabel$x, stickiness_tabel$X)
lapply(strsplit(row$sequence_full, split = ""), function(x) stickiness[x])
Il renvoie une liste de vecteurs numériques. Chaque élément de la liste correspond à la ligne que vous avez convertie et chaque vecteur est un vecteur nommé de niveaux d'adhérence nommés par la lettre correspondante.
Est-ce la sortie que vous attendiez ? Parce que ce n'est pas clair pour moi d'après votre question.
Peut-être qu'une data.table
solution conviendra à vos besoins.
J'ai créé un exemple d'ensemble de données de 1000 lignes en répétant la ligne que vous avez fournie.
library(data.table)
df <- row[rep(1, 1000),] #repeat row
df_dt <- setDT(df) # convert to data.table
value <- setNames(stickiness_tabel$x, stickiness_tabel$X)
start <- Sys.time()
df_dt[, sequence_full := lapply(sequence_full, function(x) value[unlist(strsplit(x, split = ""))])]
end <- Sys.time()
end - start
Time difference of 0.03744602 secs
df_dt[1, sequence_full]
[[1]]
M K T A Y I A K Q
0.74488994 -1.25639466 0.05766679 0.26373940 1.70150269 1.18416533 0.26373940 -1.25639466 -0.29505435
R Q I S F V K S H
-0.08929494 -0.29505435 1.18416533 -0.20946821 1.68723510 0.90050623 -1.25639466 -0.20946821 0.21527741
F S R Q L E E R L
1.68723510 -0.20946821 -0.08929494 -0.29505435 1.06680681 -0.92868779 -0.92868779 -0.08929494 1.06680681
G L I E V Q A P I
0.55679273 1.06680681 1.18416533 -0.92868779 0.90050623 -0.29505435 0.26373940 -0.17778766 1.18416533 ...
Il transforme votre table d'adhérence en un vecteur et l'indexe pour chacun sequence_full
dans chaque ligne.
Pour le sortir, vous pouvez faire:
write.csv(stack(unlist(df_dt[1, sequence_full])), file = "~/sequence_output.csv", row.names = F)
Qui renvoie un csv avec une colonne avec la valeur d'adhérence et l'autre avec l'élément de séquence.