我是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%
但我无法弄清楚它为什么不起作用。
任何建议都将受到高度赞赏。
答案 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()
函数就像一个向量化的三元运算符。