我想了解如何在不使用循环的情况下条件替换数据框中的值。我的数据帧结构如下:条件替换data.frame中的值
> df
a b est
1 11.77000 2 0
2 10.90000 3 0
3 10.32000 2 0
4 10.96000 0 0
5 9.90600 0 0
6 10.70000 0 0
7 11.43000 1 0
8 11.41000 2 0
9 10.48512 4 0
10 11.19000 0 0
和dput
输出是这样的:
structure(list(a = c(11.77, 10.9, 10.32, 10.96, 9.906, 10.7,
11.43, 11.41, 10.48512, 11.19), b = c(2, 3, 2, 0, 0, 0, 1, 2,
4, 0), est = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), .Names = c("a",
"b", "est"), row.names = c(NA, -10L), class = "data.frame")
我想要做的,是检查的b
值。如果b
为0,我想将est
设置为值a
。据我所知df$est[df$b == 0] <- 23
将est
的所有值设置为23,当时b==0
。我不明白的是当条件为真时如何将est
设置为值a
。例如:
df$est[df$b == 0] <- (df$a - 5)/2.533
给出了以下警告:
Warning message:
In df$est[df$b == 0] <- (df$a - 5)/2.533 :
number of items to replace is not a multiple of replacement length
有没有我可以通过相关的细胞,而不是向量的方法吗?
这值得一给予好评,如果你第一次添加或者是链接到R-地狱页或者用'$'(或者理想情况下都是)来总结问题。 – Andrie
+1虽然我认为在这种情况下'''运算符是完美无缺的。 (另外,我注意到,尽管你的警告你自己使用'''...) – Andrie
@Andrie:是的,我在它的工作原理中使用过它(这不是那么有帮助:-))。 OP试图用它来定义哪些元素正在被执行,哪些是故障发生的地方。我只是用它来定义一个选择数据框元素的条件。但你知道这一点:-) –