所以,我没有访问您的数据集,所以我不得不拿出一个简单的例子。
x1<-rnorm(100,mean=0,sd=10)
x2<-rep(0,100)
x3<-rep(1,100)
df<-data.frame(x1,x2,x3)
summary(df$x2)
#overwrite x2 for values of x1 less than 3
df$x2[ which(df$x1 < 3) ] <- 1
summary(df$x2)
summary(df$x3)
#overwrite x3 for values of x1 >= 3
df$x3[ which(df$x1 >= 3) ] <- 0
summary(df$x3)
您会注意到我们有一个包含3个变量的数据框。 x1是一个随机变量,x2和x3是x1的名义化(如果x1> = 3,则x2应该为1,如果x1为< 3且x3应该为0)。当我运行这个时,你会注意到使用哪个语句有助于有选择地覆盖值,因为它返回了需要被覆盖的索引。
> x1<-rnorm(100,mean=0,sd=10)
> x2<-rep(0,100)
> x3<-rep(1,100)
>
> df<-data.frame(x1,x2,x3)
>
> summary(df$x2)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0 0 0 0 0 0
>
> #overwrite x2 for values of x1 less than 3
> df$x2[ which(df$x1 < 3) ] <- 1
>
> summary(df$x2)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.00 0.00 1.00 0.58 1.00 1.00
>
> summary(df$x3)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1 1 1 1 1 1
> #overwrite x3 for values of x1 >= 3
> df$x3[ which(df$x1 >= 3) ] <- 1
>
> summary(df$x3)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1 1 1 1 1 1
> x1<-rnorm(100,mean=0,sd=10)
> x2<-rep(0,100)
> x3<-rep(1,100)
>
> df<-data.frame(x1,x2,x3)
>
> summary(df$x2)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0 0 0 0 0 0
>
> #overwrite x2 for values of x1 less than 3
> df$x2[ which(df$x1 < 3) ] <- 1
>
> summary(df$x2)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.00 0.00 1.00 0.63 1.00 1.00
>
> summary(df$x3)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1 1 1 1 1 1
> #overwrite x3 for values of x1 >= 3
> df$x3[ which(df$x1 >= 3) ] <- 0
>
> summary(df$x3)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.00 0.00 1.00 0.63 1.00 1.00
将来请发布您的数据样本,以便其他人可以更容易地重现您的错误。为了解决你的问题,你不应该需要一个'for'循环来做到这一点 - 我认为像'场地[,9] < - ifelse(场地[,7] <= 5,场地[,4],场地[ ,9])'应该可以正常工作。 – nrussell 2014-10-20 14:34:57