我有一个名为barometre2013的数据框,其中包含一个名为q0qc的列,其中包含以下数字:
[1] 15 1 9 15 9 3 6 3 3 6 6 10 15 6 15 10
我想为> = 10的数字添加+1,因此结果应为:
[1] 16 1 9 16 9 3 6 3 3 6 6 11 16 6 16 11
我试过这段代码:
if (barometre2013$q0qc > 9) {
barometre2013$q0qc <- barometre2013$q0qc + 1
}
但是这会在不考虑条件的情况下为所有数字添加+1:
[1] 16 2 10 16 10 4 7 4 4 7 7 11 16 7 16 11
我怎样才能做我想做的事?
非常感谢。
答案 0 :(得分:1)
执行时:
if (barometre2013$q0qc > 9) {
barometre2013$q0qc <- barometre2013$q0qc + 1
}
...你应该看到一个关于“只评估第一个值”的警告。 barometre2013$q0qc
中的第一个值是15,因为它是TRUE,那么该赋值是在整个向量上完成的。 ifelse
或布尔逻辑是条件评估和/或分配的注释中建议的方法。第一个:
barometre2013$q0qc <- barometre2013$q0qc + (barometre2013$q0qc >= 10)
...在起始向量中添加了1和0的向量;如果满足逻辑表达式,则为1,否则为0。如果你想添加一个以外的东西(数值为TRUE),你可以将第二个项乘以所需的增量或减量。
另一种方法是使用ifelse
对其第一个参数进行条件测试,在逐个项目的基础上返回第二个或第三个参数:
barometre2013$q0qc <- barometre2013$q0qc + ifelse(barometre2013$q0qc >= 10, 1, 0)
dash2建议的第三种方法是仅修改满足条件的那些值。请注意,此方法需要在赋值的两侧都有“测试向量”(这就是为什么dash2正在纠正之前的注释:
barometre2013$q0qc[barometre2013$q0qc>=10] <-
barometre2013$q0qc[barometre2013$q0qc>=10]+ 1
答案 1 :(得分:-5)
data <- c(15,1,9,15,9,3,6,3,3,6,6,10,15,6,15,10)
data2 <-
as.numeric(
for(i in data){
if(i >= 10){ i = i +1 }
print(i)
}
)
class(data)
class(data2)