2017-10-17 20 views
1

にキャピタル・手紙を見つけ、例えば各文字列 のためにそこにあるどのように多くのカウント私は、各文字列にキャピタル・手紙を見つけたい文字列

t = c("gctaggggggatggttactactGtgctatggactac", "gGaagggacggttactaCgTtatggactacT", "gcGaggggattggcttacG") 

ldply(str_match_all(t,"[A-Z]"),length) 

上記の関数を適用するとき、私の出力は

です
1 4 2 

しかし、私の願望出力が

である[1] G -1

[2] G -1 C -1 T -2

[3] G -2

答えて

2

あなたはあなたの正確な要求されたフォーマットであることをdocendoの答えを拡張する場合

lapply(stringr::str_extract_all(t, "[A-Z]"), 
     function(x) { 
     x = table(x) 
     paste(names(x), x, sep = "-") 
     }) 

# [[1]] 
# [1] "G-1" 
# 
# [[2]] 
# [1] "C-1" "G-1" "T-2" 
# 
# [[3]] 
# [1] "G-2" 

とどのように私はtidyverse

library(tidyverse) 
data = data.frame(strings = c("gctaggggggatggttactactGtgctatggactac", "gGaagggacggttactaCgTtatggactacT", "gcGaggggattggcttacG")) 
data %>% 
    mutate(caps_freq = stringr::str_extract_all(strings, "[A-Z]"), 
     caps_freq = map(caps_freq, function(letter) data.frame(table(letter)))) %>% 
    unnest() 
#        strings letters Freq 
# 1 gctaggggggatggttactactGtgctatggactac  G 1 
# 2  gGaagggacggttactaCgTtatggactacT  C 1 
# 3  gGaagggacggttactaCgTtatggactacT  G 1 
# 4  gGaagggacggttactaCgTtatggactacT  T 2 
# 5     gcGaggggattggcttacG  G 2 
+0

でそれを行うだろうdocendoの答え@との違いは何ですか?私はそれを見ない(最後に 'paste 'をする以外の) - 同じ答えです。imo – Sotos

+0

これは要求された出力なのでです。私はかなり明確に言ったように、私は彼の答えを広げました... – zacdav

+0

正しいことは、彼の答えの下で、貼り付け部分を収容するために追加のステップを加えることができるということです。コードの行を追加するだけで同じ回答を再投稿することは、盗作のように聞こえる。しかし、「tidyverse」の追加は新しい答え(それも私の出力が正直である方が良いと思います) – Sotos

5

あなたはすべて大文字を抽出し、テーブルを用いて周波数を計算することができる:

library(stringr) 
lapply(str_extract_all(t, "[A-Z]"), table) 
# [[1]] 
# 
# G 
# 1 
# 
# [[2]] 
# 
# C G T 
# 1 1 2 
# 
# [[3]] 
# 
# G 
# 2 
関連する問題