Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R语言中,试图为列表中的所有元素匹配并返回位于列中的字符串的一部分,并存储唯一的字符串_R_String_List - Fatal编程技术网

在R语言中,试图为列表中的所有元素匹配并返回位于列中的字符串的一部分,并存储唯一的字符串

在R语言中,试图为列表中的所有元素匹配并返回位于列中的字符串的一部分,并存储唯一的字符串,r,string,list,R,String,List,我一直在处理excel文件的多个工作表,在这些工作表中,我希望访问每个工作表中特定列中的字符信息,并希望对唯一的字符进行排序并返回它们 我已经使用read_excel函数读取了excel文件,并将每个excel表格排序为列表的一个元素。此列表中的15张图纸/元素(仅限于TIBLES)。每个TIBLE的行号不同,但列布局相同。幸运的是,存储感兴趣信息的列被称为“well_sample”。“井样本”中的每一行条目都遵循ID\u时间\u条件\u样本\u剂量格式。 例如:S1041120_T4-R190

我一直在处理excel文件的多个工作表,在这些工作表中,我希望访问每个工作表中特定列中的字符信息,并希望对唯一的字符进行排序并返回它们

我已经使用read_excel函数读取了excel文件,并将每个excel表格排序为列表的一个元素。此列表中的15张图纸/元素(仅限于TIBLES)。每个TIBLE的行号不同,但列布局相同。幸运的是,存储感兴趣信息的列被称为“well_sample”。“井样本”中的每一行条目都遵循ID\u时间\u条件\u样本\u剂量格式。 例如:S1041120_T4-R190118_3S_(-)-吲哚美辛无

我对S1041120感兴趣,它是ID(可能稍后我需要时间T4-R190118)。 问题是该列中会有几千行,其中可能有500行具有相同的ID和不同的处理方式。其他几百个重复同样的模式。或者他们有时是相同的ID,不同的时间。因此,我想在列表的每个元素中隔离此列,拆分字符串,匹配并仅返回ID。从那里,我想我可以使用unique()对唯一ID进行排序

以下是我所拥有的:

#构建模拟数据:

a<- c(rep("S1041120_T4-R190118_3S_ab_1uM_none", 500), 
      rep("S1067120_T4-R190118_3S_ab_1uM_none", 50),
      rep("S5667890_T2-R191218_3S_amnb_10uM_none", 2800))
b<- c(rep("S1023120_T0-R190118_3S_ab_1uM_none", 1000), 
      rep("S6787120_T1-R190118_3S_ab_1uM_none", 1000),
      rep("S237890_T2-R191218_3S_amnb_10uM_none", 100))

mysheets<- list(a,b)

#first set aside an empty list to store IDs
ID.cleaned <- list()

#try to use a loop to go through all elements in the list
for (i in 1:length(mysheets)) {
  #reminder the real list has my interest data in well_sample
  #mysheets[[i]]$well_sample should allow me to access that particular column
  #strsplit() to cut the string by "_"

  ID[[i]]<- strsplit(mysheets[[i]]$well_sample, "_", fixed = TRUE)
 
  #use lapply to apply the str_extract function
  #since the ID is always the first and the numbers after S is always between 4-10
  ID.cleaned[[i]]<-lapply(ID[[i]], function(x){str_extract(x,"^S\\d{4,10}")})
}
的确,从列表中的第一个元素中给了我一个字符向量[1:3350]

 ID <- strsplit(well_sample_column, "_")
这里的情况越来越奇怪,这给了我一张[1:3350]的名单,我实际上是在把我的名单弄大。第二行给出了答案 “[1]”S1041120“NA NA”而不仅仅是S1041120

运行代码后,我得到了一个ID。我得到了一个包含15个元素的列表,对应于15个原始excel表,但每个元素现在都包含一个大约3350个列表,550个以“S1041120”的格式显示,其他2800个以“S5667890”的格式显示


我觉得我陷入了死循环。我将如何取出ID并对唯一的ID进行排序?有点沮丧。

我想你不需要
ID
上的
lappy
,甚至
strsplit
。您可以直接在那里使用
str\u extract

您还可以使用
lappy
而不是
for
loop,大致如下:

lapply(mysheets, function(x) stringr::str_extract(x$well_sample,"^S\\d{4,10}"))

谢谢你,伙计!!!这太棒了。事实上,我想要的是,每个元素有一个向量,尽管我没能表达出来。我应用了独特的功能,得到了我想要的。所以我的问题是从原始列表中的错误索引开始的。我真是个白痴。申请时要小心。循环。但是我能问一下为什么我的stringsplit行生成了这么多子列表吗?它不应该为15个元素中的每一个返回一个向量吗?@ML33M
strsplit
实际生成列表而不是向量,然后使用
lappy
生成嵌套列表。的确!非常有帮助!对不起,我没有点击勾号。现在可以用了吗?
  str_extract(ID[[1]],"^S\\d{4,10}")
lapply(mysheets, function(x) stringr::str_extract(x$well_sample,"^S\\d{4,10}"))