我有3组名为minDist的列表.每个列表有三列,因此它有三个组(1,2和3).
minDist:
[[1]]
[,1] [,2] [,3]
[1,] 1.000000 9.055385 9.000000
[2,] 0.000000 9.000000 9.055385
[3,] 1.414214 8.062258 8.000000
[4,] 1.000000 8.000000 8.062258
[5,] 9.055385 1.000000 0.000000
[6,] 9.000000 0.000000 1.000000
[7,] 10.049876 1.414214 1.000000
[8,] 10.000000 1.000000 1.414214
[9,] 5.000000 5.830952 6.403124
[10,] 5.656854 6.403124 7.071068
[[2]]
[,1] [,2] [,3]
[1,] 10.000000 10.049876 9.055385
[2,] 10.049876 10.000000 9.000000
[3,] 9.000000 9.055385 8.062258
[4,] 9.055385 9.000000 8.000000
[5,] 1.000000 1.414214 1.000000
[6,] 1.414214 1.000000 0.000000
[7,] 0.000000 1.000000 1.414214
[8,] 1.000000 0.000000 1.000000
[9,] 7.211103 6.708204 5.830952
[10,] 7.810250 7.211103 6.403124
[[3]]
[,1] [,2] [,3]
[1,] 0.000000 1.000000 9.055385
[2,] 1.000000 1.414214 9.000000
[3,] 1.000000 0.000000 8.062258
[4,] 1.414214 1.000000 8.000000
[5,] 9.000000 8.000000 1.000000
[6,] 9.055385 8.062258 0.000000
[7,] 10.000000 9.000000 1.414214
[8,] 10.049876 9.055385 1.000000
[9,] 5.656854 5.000000 5.830952
[10,] 6.403124 5.830952 6.403124
Run Code Online (Sandbox Code Playgroud)
我想找出哪一行属于同一组.例如,清单1:
[1] 1 1 1 1 3 2 3 2 1 1
Run Code Online (Sandbox Code Playgroud)
含义行1,2,3,4,9和10属于组1,行6和8属于组2行5和7属于组3.
如果我只有一个列表,这就是我尝试进行分组的方式:
grouping <- apply(minDist, 1, which.min)
Run Code Online (Sandbox Code Playgroud)
如何使用循环获取所有三个列表的答案?
尝试:
lapply(minDist, function(x) max.col(-x))
Run Code Online (Sandbox Code Playgroud)
不要使用效率极低的apply(x,1,which.min); max.col相反,使用它返回矩阵的每一行最大值的索引(如果你想要最小值,你只需找到相反的最大值x).