如何使用逻辑值访问数据框的元素

How to use logical values to access elements of data frame

假设我有这个数据框:

x <- data.frame(matrix(rep(1:5, each=5), nrow=5))

假设我想对所有大于 3 的值求平方并将这些值放回 x。

我通过以下方式识别大于 3 的值:

x > 3

那我如何在 x 中引用这些值呢?做 x[x>3] returns 整数向量,而不是数据框。

请注意,我对 x[x>3] 的这个特殊问题更感兴趣,而不是我作为动机包含的实际应用程序。

只需使用矩阵索引:

ind <- which(x > 3, arr.ind = TRUE)
x[ind] <- x[ind] * x[ind] ## or x[ind] <- x[ind]^2
x
#   X1 X2 X3 X4 X5
# 1  1  2  3 16 25
# 2  1  2  3 16 25
# 3  1  2  3 16 25
# 4  1  2  3 16 25
# 5  1  2  3 16 25

或者,您可以 replace(x, x > 3, x[x > 3]^2),但请记住,这实际上并没有修改您的 "x" 对象,因此需要重新分配它。

或者,

> x[x>3] <- (x[x>3])^2
> x
  X1 X2 X3 X4 X5
1  1  2  3 16 25
2  1  2  3 16 25
3  1  2  3 16 25
4  1  2  3 16 25
5  1  2  3 16 25