0

データを編集したところ、以下のようになりました。

           Sequence       modifications                      No_Ks No_Ks_modif diff
1   AAAAGAAAVANQGKK       Acetyl Acetyl                        2           2    0
2 AAIKFIKFINPKINDGE       Acetyl Biotin Acetyl                 3           3    0
3 AAIKFIKFINPKINDGE       Acetyl Acetyl                        3           2    1
4 IKKVGYNPKTVPFVPIS       Acetyl Acetyl Acetyl Oxidation       3           4   -1

No_Ks -> シーケンス内の K の総数 No_Ks_modif -> アセチルまたはビオチンによって変更された K の数 (のみである必要があります) ですが、酸化もカウントされるため、より高い場合は変更された K の数とそれらの総数になります。

以下のコードを使用して、(シーケンスから) 変更された K の数をカウントしました。

# Count of modifications    
dataset[, No_Ks_modif := 6]
dataset[V6 == "", No_Ks_modif := 5]
dataset[V5 == "", No_Ks_modif := 4]
dataset[V4 == "", No_Ks_modif := 3]
dataset[V3 == "", No_Ks_modif := 2]
dataset[V2 == "", No_Ks_modif := 1]
dataset[V1 == "", No_Ks_modif := 0]

# Retaining Acetyl/Biotin or no modification only
dataset[, AB01 := TRUE]
dataset[, AB02 := TRUE]
dataset[, AB03 := TRUE]
dataset[, AB04 := TRUE]
dataset[, AB05 := TRUE]
dataset[, AB06 := TRUE]

dataset[V1 != "",  AB01 := grepl(V1, pattern = "Acetyl|Biotin|Oxidation")]
dataset[V2 != "",  AB02 := grepl(V2, pattern = "Acetyl|Biotin|Oxidation")]
dataset[V3 != "",  AB03 := grepl(V3, pattern = "Acetyl|Biotin|Oxidation")]
dataset[V4 != "",  AB04 := grepl(V1, pattern = "Acetyl|Biotin|Oxidation")]
dataset[V5 != "",  AB05 := grepl(V2, pattern = "Acetyl|Biotin|Oxidation")]
dataset[V6 != "",  AB06 := grepl(V3, pattern = "Acetyl|Biotin|Oxidation")]


dataset <- dataset[AB01 & AB02 & AB03 & AB04 & AB05 & AB06]

コードから「酸化」を削除すると、行全体がカウントされず、それが問題です。

2つの方法があります。1 つの方法は、ビオチンとアセチルのみを変更としてカウントすることですが、私のスクリプトでは実行できません。2番目の方法は、すべての列から「酸化」を除去することですが、どちらもその方法がわかりません。どんな提案でも大歓迎です。

最後に愚かな質問。コードのすべての行でスペースを 4 回押すことなく、巨大なコードを適切な方法で貼り付ける方法はありますか?

編集:コード全体を実行する前のデータセットには、2つの列のみが含まれていました:

Sequence                 modifications
AAAAGAAAVANQGKK     [14] Acetyl (K)|[15] Acetyl (K)
AAIKFIKFINPKINDGE   [4] Acetyl (K)|[7] Acetyl (K)

そして、はるかに多くの行。

4

1 に答える 1

3

これを行う簡単な方法は確かにあります。これが一例です。まず、私が思うようにデータセットを再構築します。

> df=read.table(text="Sequence                 modifications
+ AAAAGAAAVANQGKK     '[14] Acetyl (K)|[15] Acetyl (K)'
+ AAIKFIKFINPKINDGE   '[4] Acetyl (K)|[7] Acetyl (K)'",h=T,stringsAsFactors = F)
> dt<-data.table(df)
> dt
            Sequence                   modifications
1:   AAAAGAAAVANQGKK [14] Acetyl (K)|[15] Acetyl (K)
2: AAIKFIKFINPKINDGE   [4] Acetyl (K)|[7] Acetyl (K)

strsplitこれで、作業を行うために使用できます。

dt[,no_Ks:=lapply(strsplit(Sequence,""),function(x) sum(x=="K"))]
dt[,no_Ks_modif:=lapply(strsplit(modifications," "),
        function(x) sum(x %in% c("Acetyl","Biotin")))]
dt
##             Sequence                   modifications no_Ks no_Ks_modif
## 1:   AAAAGAAAVANQGKK [14] Acetyl (K)|[15] Acetyl (K)     2           2
## 2: AAIKFIKFINPKINDGE   [4] Acetyl (K)|[7] Acetyl (K)     3           2
于 2013-10-17T13:13:17.623 に答える