如何使用逻辑值访问数据框的元素
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
假设我有这个数据框:
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