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]

如果我从代码中删除“氧化”,它将不会计算整行,这就是问题所在。

我看到了两种方法。一种方法可能是仅将生物素和乙酰基算作修改,我的脚本无法做到这一点。第二种方法是从所有列中删除“氧化”,也不知道该怎么做。欢迎任何建议。

最后一个愚蠢的问题。有没有办法以正确的方式粘贴大量代码,而无需在所有代码行中按 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 回答