데이터 프레임 매핑을 기반으로 문자 목록을 부동 소수점 시퀀스로 대체

Aug 19 2020

매핑 데이터 프레임과 각 행이 해당 시퀀스와 함께 단백질을 나타내는 큰 데이터 프레임이 있습니다.

매핑 데이터 프레임을 기반으로 아미노산에 해당하는 값에 시퀀스를 매핑하는 효율적인 방법을 원합니다.

시퀀스를 반복하고 다음 코드로 바꿀 수있었습니다.

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])

어디에 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))

내 시퀀스의 데이터 프레임에 많은 항목이 있기 때문에 더 빠른 방법이 있는지 알고 싶었습니다.

데이터 프레임의 간단한 행은 다음과 같습니다.

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")

내가 관심있는 sequence_full.

편집하다

다음 행의 경우 :

MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQAPILSRVGDGTQDNLSGAEKAVQVKVKALPDAQFEVVHSLAKWKRQTLGQHDFSAGEGLYTHMKALRPDEDRLSPLHSVYVDQWDWERVMGDGERQFSTLKSTVEAIWAGIKATEAAVSEEFGLAPFLPDQIHFVHSQELLSRYPDLDAKGRERAIAKDLGAVFLVGIGGKLSDGHRHDVRAPDYDDWSTPSELGHAGLNGDILVWNPVLEDAFELSSMGIRVDADTLKHQLALTGDEDRLELEWHQALLRGEMPQTIGGGIGQSRLTMLLLQLPHIGQVQAGVWPAAVRESVPSLL

나는 다음과 같은 것을 얻고 싶다.

[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"

그런 다음 출력을 파일로 내 보내야합니다.

답변

1 Edo Aug 19 2020 at 17:31

나는 당신이했던 것과 같은 방식으로 데이터를 호출했습니다.


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")

이제 할 수있는 일은 다음과 같습니다.

stickiness <- setNames(stickiness_tabel$x, stickiness_tabel$X)
lapply(strsplit(row$sequence_full, split = ""), function(x) stickiness[x])

숫자 형 벡터 목록을 반환합니다. 목록의 각 요소는 변환 한 행에 해당하고 각 벡터는 해당 문자로 명명 된 고정 수준의 명명 된 벡터입니다.

이것이 예상 한 출력입니까? 귀하의 질문에서 명확하지 않기 때문입니다.

1 Humpelstielzchen Aug 19 2020 at 18:10

아마 data.table솔루션은 사용자의 요구에 맞게됩니다.

제공 한 행을 반복하여 1000 개 행의 샘플 데이터 세트를 만들었습니다.


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 ...

고정 테이블을 벡터로 바꾸고 sequence_full각 행에 대해 인덱싱합니다 .

출력하려면 다음을 수행하십시오.

write.csv(stack(unlist(df_dt[1, sequence_full])), file = "~/sequence_output.csv", row.names = F)

고정 값이있는 한 열과 시퀀스 요소가있는 다른 열이있는 csv를 반환합니다.