我在 R
中有一个字符向量,每个元素都包含一个字符串 - 让我们使用这个例子:
my.files <- c("AWCallibration#NoneBino-3", "AWExperiment1#NoneBino-1", "AWExperiment2#NonemonL-2"
)
我想从这些字符串中提取某些信息 -
- 首先,两个大写字母字符(在本例中,始终是
"AW"
) - 试验是用于校准(
"Callibration"
)还是数据收集 - 如果是后者,使用了哪种条件("Experiment1"
或“实验 2”
) - 在这个特定的试验中使用了哪个子条件(
“Bino”
或“monL”
) - 子条件的重复(
“1”
或“2”
)
我首先尝试使用 strsplit
,但这似乎只适用于具有常规 分隔符(例如 “_”
)的情况。 substring
似乎更适合我的需要,但由于拆分不会发生在常规位置("Experiment1"
有 11 个元素长,“校准”
是十二)。
我怀疑使用正则表达式可能是这里的答案,但我不知道如何解释拆分之间的不同长度。
最佳答案
可以一条一条的提取信息:
first <- substr(my.files, 1, 2)
# [1] "AW" "AW" "AW"
second <- sub("^..(.*)#.*", "\\1", my.files)
# [1] "Callibration" "Experiment1" "Experiment2"
third <- sub("^.*#None(.*)-\\d+$", "\\1", my.files)
# [1] "Bino" "Bino" "monL"
fourth <- sub(".*-(\\d+)$", "\\1", my.files)
# [1] "3" "1" "2"
一条命令:
strsplit(my.files, "(?<=^..)(?=[A-Z])|#None|-", perl = TRUE)
# [[1]]
# [1] "AW" "Callibration" "Bino" "3"
#
# [[2]]
# [1] "AW" "Experiment1" "Bino" "1"
#
# [[3]]
# [1] "AW" "Experiment2" "monL" "2"
关于regex - 在R中拆分没有分隔符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20997969/