使用for循环R重写变量

时间:2014-04-23 01:35:08

标签: r

我的数据集中有一个包含0,1和2的集合的列.2是以前转换中的一个奇怪的剩余部分,我需要将它们转换为1.我和#39;写了一个简单的循环来做到这一点

for (i in my.cl.accept$enroll){
  if (i==2){
    i=1
  }
}

但是,这并没有改变数据帧的实际内容。 ifelse()无效,因为我根本不需要更改其他数字;只是数字2。

我从python出来之后一直在使用R,我在这里误解了什么简单的事情?

3 个答案:

答案 0 :(得分:0)

Dunno这是否是你想要的?

> A<- 1:10
> B<- c(rep(0,5), rep(1,3), rep(2,2))
> data <- data.frame(A,B)
> data
    A B
1   1 0
2   2 0
3   3 0
4   4 0
5   5 0
6   6 1
7   7 1
8   8 1
9   9 2
10 10 2

> data[data$B==2,]$B <- 1
> data
    A B
1   1 0
2   2 0
3   3 0
4   4 0
5   5 0
6   6 1
7   7 1
8   8 1
9   9 1
10 10 1

答案 1 :(得分:0)

您确定正确使用ifelse吗?它实际上确实允许您只将一个值更改为另一个值。这是一个例子:

> x <- sample(c(0, 1, 2), 10, TRUE)
> x
## [1] 2 1 1 0 2 2 0 0 2 1
> ifelse(x == 2, 1, x)
## [1] 1 1 1 0 1 1 0 0 1 1

为了将来参考,您的老式for循环应该是这样的......

for (i in 1:length(my.cl.accept$enroll)){
  if (my.cl.accept$enroll[i] == 2){
    my.cl.accept$enroll[i] <- 1
  } else {
    my.cl.accept$enroll[i]
  }
}

答案 2 :(得分:0)

让我们生成一个样本集:

set.seed(10)
DF <- data.frame(
  a=1:10,
  b=sample(0:2,10,rep=T))
DF

现在,将1对应的每个条目替换为1:

DF$b[DF$b==2] <- 1
DF

注意:这是一个矢量化方法,并且总是比循环迭代更快。