我有一个由四列组成的数据框。第三个是因子变量,级别为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
我该怎么做我想做的事?提前谢谢。
答案 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