在数据帧中按因子应用函数时出错

时间:2013-09-02 18:08:55

标签: r

我有一个由四列组成的数据框。第三个是因子变量,级别为A和B,第四个变量为数字。如果相应的因子级别为B,我想翻转数值变量的符号。因此,给定我的数据帧的行x,我想这样做:

negate <- function(x) { 
  if(x[3] == B) {
    x[4] <- -x[4]
  }
}

然而,当我尝试

apply(dataframe,1,negate)

我收到以下错误:

Error in -x[4] : invalid argument to unary operator

我该怎么做我想做的事?提前谢谢。

2 个答案:

答案 0 :(得分:1)

这可以进行矢量化:

logicalVector <- x[3]=="B"
negativeVector <- c(1,-1)[logicalVector+1]
x[4] <- x[4}*negativeVector

答案 1 :(得分:0)

此处不需要apply功能(只需使用ifelse):

mydata$col4<-with(mydata,ifelse(col3=="B",-col4,col4))

使用R:

中的虹膜数据进行测试
mydata<-iris
mydata$Petal.Length<-with(mydata,ifelse(Species=="setosa",-Petal.Length,Petal.Length))
> mydata
    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
1            5.1         3.5         -1.4         0.2     setosa
2            4.9         3.0         -1.4         0.2     setosa
3            4.7         3.2         -1.3         0.2     setosa
4            4.6         3.1         -1.5         0.2     setosa