0

我最近开始使用 R,我正在尝试为以下问题找到解决方案:

我有data.frame几列。其中之一包含文件名以及所需的所有信息。示例:“13_07_26_SpeciesA_Genotype22_Column1Row2”

我想使用名称中的信息创建新列。例如基因型列带有“22”,行列带有“2”等等。

我可以单独执行此操作,grepl如下gsub所示:

 files <- c("13_12_26_Species_Genotype22_Column1Row2", 
       "15_12_26_Species_Genotype01_Column2Row5")  
weights <- c(20,40)           
spreadsheet <- data.frame(files,weights)  
GT22 <- grepl("Genotype22", spreadsheet$files)    
spreadsheet$GT <- gsub("TRUE","22",GT22)

但是我必须检查来自不同日期等的许多文件中的> 1000个基因型。所以我试图将一个向量与所有可能的基因型进行比较,例如

 gt.list <- paste("Genotype",01:1000,sep="")

使用电子表格$files 列,使用类似match()or的函数apply()。但我无法让它运行。基因型不按顺序排列,因此我想将“文件”列的每个单元格与我的向量中的所有条目进行比较,然后将所有匹配项写入新列(...22,01,...)。我可以针对不同的信息重写这个函数。

如果有任何帮助,我将不胜感激!

4

1 回答 1

1
DF <- data.frame(
  do.call(rbind,strsplit(files,'_',fixed=T)),
  weights,
  stringsAsFactors=FALSE)
DF$GT <- substr(DF[,5],9,nchar(DF[,5]))
DF$Row <- do.call(rbind,strsplit(DF[,6],'Row',fixed=T))[,2]

#   X1 X2 X3      X4         X5          X6 weights GT Row
# 1 13 12 26 Species Genotype22 Column1Row2      20 22   2
# 2 15 12 26 Species Genotype01 Column2Row5      40 01   5

我不是正则表达式奇才。

于 2013-04-19T12:46:41.843 回答