我是R的新手,拥有1024行数据,包含3列数值数据。我创建了一个plot3d,我需要识别一个异常值的行号,它在plot3D中像一个疼痛的拇指一样突出,但在任何其他图中都是不可见的。
答案 0 :(得分:1)
希望这有助于为您完成工作。
> data <- c(-1.5454, -0.6855, 0.1003, -0.5284, -0.4065, -0.2645,
-1.0868, -0.5329, 0.1623, -1e-04, -0.9569, -2.0055,
0.389, -0.8356, -2.2085, 0.5326, 0.0391, -0.5044,
-1.8376, -0.7834, 0.3436)
## original data
> dd <- data.frame(matrix(data, ncol = 3, byrow = TRUE))
## find the row number of the largest row maximum
> which.max(apply(dd, 1, max))
[1] 6
## Use the previous line to remove the unwanted row
> newDd <- dd[ -which.max(apply(dd, 1, max)), ]
## plot the two data frames together to see the difference
> library(plot3D)
> par(mfrow = c(1, 2))
> with(dd, scatter3D(X1, X2, X3, phi = 0, theta = 50, bty = "g",
col = gg.col(100), pch = 19, cex = 2, colkey = FALSE))
> with(newDd, scatter3D(X1, X2, X3, phi = 0, theta = 50, bty = "g",
col = gg.col(100), pch = 19, cex = 2, colkey = TRUE))
答案 1 :(得分:0)
使用built-int arrayInd
查找最大值(或最小值):
arrayInd(which.max(as.matrix(df)), .dim = dim(df))
例如,我们将用一个拇指做一个3列数据框。
df <- data.frame(structure(replicate(3, runif(1024, 0, 1), simplify = FALSE), .Names = c('one', 'two', 'three')))
df[50, 2] <- 10
现在我们得到
arrayInd(which.max(as.matrix(df)), .dim = dim(df))
# [,1] [,2]
# [1,] 50 2
我们看到罪犯排在第50行和第2列。
答案 2 :(得分:0)
欢迎用户3479729。请发布reproducible example。否则你将得不到答案或不好答案。
如果&#39; M&#39;是你绘制的矩阵和&#39; thres&#39;是你的异常数据的门槛(我需要假设你正在绘制一个矩阵?),你可以使用:
> which(M>thres,arr.ind=TRUE)