从字符向量中提取元素

时间:2014-09-17 16:16:32

标签: r string character elements

在我的设置中我有以下变量:

loc <- c('anf', 'iqq', 'stg', 'ccp', 'coy', 'puq')
subDirs <- list.dirs(full.names = FALSE)

在我提取子目录名称的当前目录中,我有一些子目录,其中我感兴趣的是我处理的数据。但是还有一些其他子目录我无法删除,因为它们包含其他重要文件。我感兴趣的子目录具有特殊性,每个人都以“代码”开头,可以是:anf,iqq,stg,ccp,coy,puq。因此,我想在子目录名称的前3个字符中提取包含这些代码的子目录名称。

for (k in 1:length(subDirs)){
    if (!substr(subDirs[k], 1, 3) %in% loc & !is.na(subDirs[k])){
        subDirs <- subDirs[subDirs != subDirs[k]]
    }
}

例如,我有

[1] ""               "anf_b2_results" "anf_c1_results" "anf_c2_results" "anf_c3_results"
 [6] "anf_e1_results" "anf_e2_results" "iqq_b2_results" "iqq_e1_results" "iqq_e2_results"
[11] "poi_library"    "stg_b2_results" "stg_e1_results" "stg_e2_results"

我想:

[1] "anf_b2_results" "anf_c1_results" "anf_c2_results" "anf_c3_results" "anf_e1_results"
 [6] "anf_e2_results" "iqq_b2_results" "iqq_e1_results" "iqq_e2_results" "stg_b2_results"
[11] "stg_e1_results" "stg_e2_results"

我这样做是为了提取我感兴趣的名字,但是有更好的(有效的,更容易的)方式吗?我觉得我所做的是太多硬编码,我想要一个高效的代码,因为之后会有很多子目录。

最好的问候

1 个答案:

答案 0 :(得分:0)

您不需要任何for循环。 substr是矢量化的。只是做:

subDirs[substr(subDirs, 1, 3) %in% loc]
# [1] "anf_b2_results" "anf_c1_results" "anf_c2_results" "anf_c3_results" "anf_e1_results"
# [6] "anf_e2_results" "iqq_b2_results" "iqq_e1_results" "iqq_e2_results" "stg_b2_results"
# [11] "stg_e1_results" "stg_e2_results"