我是R的新手,并且在循环和grepl函数方面存在一些问题 我有类似的数据:
str(peptidesFilter)
'data.frame': 78389 obs. of 130 variables:
$ Sequence : chr "AAAAAIGGR" "AAAAAIGGRPNYYGNEGGR" "AAAAASSNPGGGPEMVR" "AAAAAVGGR" ...
$ First.amino.acid : chr "A" "A" "A" "A" ...
$ Protein.group.IDs : chr "1" "1;2;4" "2;5 "3" "4;80" ...
我想通过使用下面的grepl函数根据$ Protein.group.IDs过滤数据
peptidesFilter.new <- peptidesFilter[grepl('(^|;)2($|;)',
peptidesFilter$Protein.group.IDs),]
我想用每个数据的循环(例如1,2,3等等)来做 并重写包含变量peptideFilter.i
的数据框的名称 i =1
while( i <= N) { peptidesFilter.[[i]] <-
peptidesFilter[grepl('(^|;)i($|;)',
peptidesFilter$Protein.group.IDs),]
i=i+1 }
我有两个问题,
我在grep1函数中的主要部分不会被识别为变量,以及如何以包含变量的方式重命名过滤数据。
任何想法?
答案 0 :(得分:1)
对于grepl问题,您可以使用paste0
例如:
paste0('(^|;)',i,'($|;)')
对于循环,你可以这样:
ll <- lapply(seq(1:4),function(x)
peptidesFilter[grepl(paste0('(^|;)',x,'($|;)'),
peptidesFilter$Protein.group.IDs),])
然后你可以将它转换为data.frame:
do.call(rbind,ll)
Sequence First.amino.acid Protein.group.IDs
1 AAAAAIGGR A 1
2 AAAAAIGGRPNYYGNEGGR A 1;2;4
21 AAAAAIGGRPNYYGNEGGR A 1;2;4
3 AAAAASSNPGGGPEMVR A 2;5
4 AAAAAVGGR A 3
22 AAAAAIGGRPNYYGNEGGR A 1;2;4