我是R的新手,所以如果这是一个愚蠢的问题,请放轻松。
我有一个名为foo
的数据框:
< head(foo)
Old.Clone.Name New.Clone.Name File
1 A Aa A_mask_MF_final_IS2_SAEE7-1_02.nrrd
2 B Bb B_mask_MF_final_IS2ViaIS2h_SADQ15-1_02.nrrd
3 C Cc C_mask_MF_final_IS2ViaIS2h_SAEC16-1_02.nrrd
4 D Dd D_mask_MF_final_IS2ViaIS2h_SAEJ6-1_02.nrrd
5 E Ee F_mask_MF_final_IS2_SAED9-1_02.nrrd
6 F Ff F_mask_MF_final_IS2ViaIS2h_SAGP3-1_02.nrrd
我想从File
列中提取与正则表达式(S[A-Z]{3}[0-9]{1,2}-[0-9]_02)
匹配的代码,以便给我:
SAEE7-1_02
SADQ15-1_02
SAEC16-1_02
SAEJ6-1_02
SAED9-1_02
SAGP3-1_02
然后,我想使用这些代码在另一个目录中搜索包含相同代码的其他文件。
但是,我在第一个障碍时失败了,无法从数据框的该列中提取代码。
我试过了:
library('stringr')
str_extract(foo[3],regex("(S[A-Z]{3}[0-9]{1,2}-[0-9]_02)", ignore_case = TRUE))
但这只会返回[1] NA
。
我只是遗漏了一些明显的东西吗?我期待在社区的帮助下解决这个问题。
答案 0 :(得分:0)
str_extract(foo[3],"(?i)S[A-Z]{3}[0-9]{1,2}-[0-9]_02")
似乎有效。不知何故,我的R给了我
&#34; check_pattern(pattern,string)出错:找不到函数&#34; regex&#34;&#34;
使用原始表达时。
答案 1 :(得分:0)
以下代码将重复您的要求(只需复制并粘贴到您的R控制台):
library(stringr)
foo = scan(what='')
Old.Clone.Name New.Clone.Name File
A Aa A_mask_MF_final_IS2_SAEE7-1_02.nrrd
B Bb B_mask_MF_final_IS2ViaIS2h_SADQ15-1_02.nrrd
C Cc C_mask_MF_final_IS2ViaIS2h_SAEC16-1_02.nrrd
D Dd D_mask_MF_final_IS2ViaIS2h_SAEJ6-1_02.nrrd
E Ee F_mask_MF_final_IS2_SAED9-1_02.nrrd
F Ff F_mask_MF_final_IS2ViaIS2h_SAGP3-1_02.nrrd
foo = matrix(foo,ncol=3,byrow=T)
colnames(foo)=foo[1,]
foo = foo[-1,]
foo
str_extract(foo[,3],regex("(S[A-Z]{3}[0-9]{1,2}-[0-9]_02)", ignore_case = T))
隐藏的原因是:R按列存储条目,因此foo[3]
是foo矩阵/数据帧的第3行和第1列。要引用第三列,您可能需要使用foo[,3]
。或foo<-data.frame(foo); foo[[3]]
。
答案 2 :(得分:0)
您好如果您正在将数据作为表格文件读取,那么foo[3]
是一个列表而str_extract不接受列表,只接受字符串,那么您应该使用lapply来提取每个元素的匹配。
lapply(foo[3], function(x) str_extract(x, "[sS][a-zA-Z]{3}[0-9]{1,2}-[0-9]_02"))
<强> 结果: 强>
[1] "SAEE7-1_02" "SADQ15-1_02" "SAEC16-1_02" "SAEJ6-1_02" "SAED9-1_02"
[6] "SAGP3-1_02"