2
에 여러 변수에 벡터를 할당하는 방법이 다음과 같은 데이터 프레임 :dplyr의 mutate
library(tidyverse)
dat <-structure(list(motif_name_binned = c("Ddit3::Cebpa/MA0019.1/Jaspar.instid_chr1:183286845-183287245.bin1",
"Ddit3::Cebpa/MA0019.1/Jaspar.instid_chr1:183286845-183287245.bin2",
"Ddit3::Cebpa/MA0019.1/Jaspar.instid_chr1:183286845-183287245.bin3"
), motif_score = c(6.816695, 6.816695, 6.816695)), row.names = c(NA,
-3L), class = c("tbl_df", "tbl", "data.frame"), .Names = c("motif_name_binned",
"motif_score"))
dat
이 제공 :
> dat
# A tibble: 3 x 2
motif_name_binned motif_score
<chr> <dbl>
1 Ddit3::Cebpa/MA0019.1/Jaspar.instid_chr1:183286845-183287245.bin1 6.816695
2 Ddit3::Cebpa/MA0019.1/Jaspar.instid_chr1:183286845-183287245.bin2 6.816695
3 Ddit3::Cebpa/MA0019.1/Jaspar.instid_chr1:183286845-183287245.bin3 6.816695
내가 motif_named_binned
의 값을 추출하여 내가 원하는 것을 얻을 수 있습니다 이 코드를 사용하여 :
dat %>%
mutate(motif = str_match(motif_name_binned,"^(.*?)\\/.*?")[,2],
inst = str_match(motif_name_binned,"^.*?\\/.*?\\/.*?\\.instid_(.*?)\\.bin\\d+")[,2],
binno = as.integer(str_match(motif_name_binned,"^.*?\\/.*?\\/.*?\\.bin(\\d+)")[,2]))
다음은
# A tibble: 3 x 5
motif_name_binned motif_score motif inst binno
<chr> <dbl> <chr> <chr> <int>
1 Ddit3::Cebpa/MA0019.1/Jaspar.instid_chr1:183286845-183287245.bin1 6.816695 Ddit3::Cebpa chr1:183286845-183287245 1
2 Ddit3::Cebpa/MA0019.1/Jaspar.instid_chr1:183286845-183287245.bin2 6.816695 Ddit3::Cebpa chr1:183286845-183287245 2
3 Ddit3::Cebpa/MA0019.1/Jaspar.instid_chr1:183286845-183287245.bin3 6.816695 Ddit3::Cebpa chr1:183286845-183287245 3
그러나 정규 표현식을 3 번 실행하고 하나씩 변수에 할당해야합니다. 어디 사실 나는 이와 같은 하나의 정규식을 사용할 수 있습니다 나중에 올인원 정규식 dplyr mutate()
이 통합 방법
str_match(motif_name_binned,"^(.*?)\\/.*?\\/.*?\\.instid_(.*?)\\.bin(\\d+)")[,c(2,3,4)]
?