我有这些专栏:
text.NANA text.22 text.32
1 Female RNDM_MXN95.tif No NA
12 Male RNDM_QOS38.tif No NA
13 Female RNDM_WQW90.tif No NA
14 Male RNDM_BKD94.tif No NA
15 Male RNDM_LGD67.tif No NA
16 Female RNDM_AFP45.tif No NA
我想创建一个只包含以RNDM_
开头且以.tif
结尾的条形码的列,但不包括.tif
。棘手的部分是摆脱同一列中的性别信息。性别信息与RNDM_
:
text.NANA text.22 text.32 BARCODE
1 Female RNDM_MXN95.tif No NA RNDM_MXN95
12 Male RNDM_QOS38.tif No NA RNDM_QOS38
13 Female RNDM_WQW90.tif No NA RNDM_WQW90
14 Male RNDM_BKD94.tif No NA RNDM_BKD94
15 Male RNDM_LGD67.tif No NA RNDM_LGD67
16 Female RNDM_AFP45.tif No NA RNDM_AFP45
我对此做了一次非常糟糕的尝试,但它没有奏效:
dfrm$BARCODE <- regexpr("RNDM_", dfrm$text.NANA)
# [1] 8 6 9 7 7 8 9 9 8 8 9 9 6 6 7 8 9 8
# attr(,"match.length")
# [1] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
# attr(,"useBytes")
# [1] TRUE
请帮忙。谢谢!
答案 0 :(得分:2)
所以你只想删除文件扩展名?使用file_path_sans_ext
:
dfrm$BARCODE = file_path_sans_ext(dfrm$text.NANA)
如果前面有更多内容,您可以使用以下正则表达式来提取后缀:
dfrm$BARCODE = stringr::str_match(dfrm$text.NANA, '(RNDM_.*)\\.tif')[, 2]
请注意,我在这里使用{stringr}包,因为用于提取正则表达式匹配的基本R函数非常糟糕。没有人使用它们。
我强烈建议使用strsplit
来使用,因为它未被指定:从阅读代码时,我们绝对不清楚该代码的用途是什么。编写不言自明的代码,而不是需要在评论中解释的代码。
答案 1 :(得分:0)
你可以使用sapply()和strsplit轻松完成,让我告诉你:
sapply(strsplit(dfrm$text.NANA, "_"),"[", 1)
这应该有效。
编辑:
sapply(strsplit(x, "[ .]+"),"[", 2)