我的数据集中有一个包含0,1和2的集合的列.2是以前转换中的一个奇怪的剩余部分,我需要将它们转换为1.我和#39;写了一个简单的循环来做到这一点
for (i in my.cl.accept$enroll){
if (i==2){
i=1
}
}
但是,这并没有改变数据帧的实际内容。 ifelse()
无效,因为我根本不需要更改其他数字;只是数字2。
我从python出来之后一直在使用R,我在这里误解了什么简单的事情?
答案 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
注意:这是一个矢量化方法,并且总是比循环迭代更快。