我编辑了我的数据,如下所示:
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]
如果我删除&#34;氧化&#34;从代码中它不会计算整行,这就是问题所在。
我认为有两种方法可以做到。一种方法可能只是将生物素和乙酰基作为修饰,我的脚本无法做到。第二种方法是删除&#34;氧化&#34;从所有专栏中,都不知道如何做到这一点。欢迎任何建议。
最后的愚蠢问题。有没有办法以正确的方式粘贴大量代码而不在代码的所有行中按下4倍空格?
编辑: 运行整个代码之前的数据集只涉及2列:
Sequence modifications
AAAAGAAAVANQGKK [14] Acetyl (K)|[15] Acetyl (K)
AAIKFIKFINPKINDGE [4] Acetyl (K)|[7] Acetyl (K)
还有更多行。
答案 0 :(得分: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