如果字符串包含某些模式,那么

时间:2015-07-17 10:59:53

标签: r

给出以下向量包含变量名称:

variables = c("bla_P_blub","bla_K_blib","blo_P_blub","blu_I_blub","bli_K_blub")

我想要做的是,如果variables[i]包含 K ,那么如果它包含 P I ,请执行然后做某事其他

我的方法如下,但它不起作用:

class_var = 1

if(grep("_K_",variables[i]) > 0){
    class_var = 1
} else{
    class_var = 0
}

if (class_var == 1){

  do sth.

}

if (class_var == 0){

  do sth. else

}

问题是如果variables[i]不包含 K ,那么我会得到结果:

  

if中的错误(" K ",变量[12])> 0){:参数是   零长度

有什么建议吗?

提前致谢!

3 个答案:

答案 0 :(得分:3)

我会使用正则表达式来提取触发正确函数所需的信息,因此在您的情况下它是'_X_'
稍后我将使用重要信息迭代向量并使用开关 您可以在{}中使用switch来执行更多功能,然后只需打印...

variables = c("bla_P_blub","bla_K_blib","blo_P_blub","blu_I_blub","bli_K_blub")

myvars <- sub('.*_([A-Z])_.*', '\\1', variables)
for(myvar in myvars) {
  switch(myvar,
         P=cat('it is a P\n'),
         K={
           cat('it is a K\n')
           cat(sprintf('%s\n',date()))
           },
         cat(sprintf('it was an %s\n', myvar)))
}

返回以下内容

it is a P
it is a K
Fri Jul 17 13:13:51 2015
it is a P
it was an I
it is a K
Fri Jul 17 13:13:51 2015

答案 1 :(得分:1)

最简单的修复是使用长度,因为没有匹配给出一个空向量:

if(length(grep("_K_",variables[i]) > 0)){

答案 2 :(得分:1)

在r中,grep("K", "YourString")返回索引向量。您需要使用grep("K", variables[12])测试length(grep("_K_",variables[i])的长度。

如果长度> 0然后找到匹配。否则,您的变量包含K