匹配几个重复的名称/字符串

时间:2014-06-03 17:24:57

标签: string r if-statement grep match

我是R的新人(和自学成才)所以请耐心等待。

我的数据类似于:

variable    value
asdf    3
sdfg    2
dfgh    5
fghj    6
ghjk    6
fghj    7
qwer    8
wert    5
erty    2

我需要将指数函数应用于所有行的值。但是,变量名称等于“asdf”,“wert”或“fghj”的行应保持不变。

我试图直接这样做

   if ( (c("asdf", "wert", "fghj")) %in% df$variable {
      df$value <- df$value
    } else if {
      df$value <- exp(df$value)
    }

由于它不起作用,我试图创建一个向量,指出那些包含名称作为垫脚石的行(也是不成功的)。

tomatch <- c("asdf", "wert", "fghj")

exporder <- grep("tomatch", df$variable)

我查看了match()函数,但它只报告了第一个匹配但未报告以下内容,我也应用了%in%但我无法弄清楚它为什么不起作用。

任何建议都将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

你可以做到

totrans <- !(df$variable %in% c("asdf", "wert", "fghj"))
df$value[totrans] <- exp(df$value[totrans])

df$value <- ifelse(df$variable %in% c("asdf", "wert", "fghj"), 
    df$value, exp(df$value))

%in%if的问题在于,您的%in%参数被翻转(%in%不是交换的)而if不是矢量化操作在R. ifelse()函数就像一个向量化的三元运算符。