如何使用 which.min 确定绝对行号并点击?
How to determine absolute row number using which.min and tapply?
我的数据集名为 ds,是一个包含三列和 4000 多个观察值的矩阵。
ds 中的三列是:
name v2 f1
- 名字是角色
- v2 是数字
- f1 是 54 级的因子
我想找到因子 x 的 v2 的最小值位置。我尝试如下使用 tapply
tapply(ds$v2, ds$f1 == x, which.min)
我得到的答案是这样的:
FALSE TRUE
2821 19
我假设 19 是我数据集中的绝对位置,如果我想找到观察的名称,我需要做的就是
ds[19, 1]
但显然这是不正确的。我知道 19 对应于相对位置,即它是因子 x 的第 19 个观察值。
所以我的问题是:如何找到因子 x 的最小值的绝对位置?
tapply
会将函数应用于第二个参数的每个唯一值,因此您不应该使用 ds$f1 == x
并且可能只使用 ds$f1
所以它看起来像:
tapply(ds$v2, ds$f1 == x, which.min)
这里以R自带的鸢尾花数据集为例:
tapply(iris$Sepal.Length, iris$Species, which.min)
编辑:
但是,正如您所指出的,这将为您提供子集数据中的位置,而不是绝对位置。
我认为不可能从 tapply
中获得绝对值,因为您正在处理单个向量。如果你想一次处理多个列,你可以使用这种方法:
d <- split(iris, iris$Species)
row_positions <- sapply(d, function(x) rownames(x[which.min(x$Sepal.Length), ]))
iris[row_positions, ]
我的数据集名为 ds,是一个包含三列和 4000 多个观察值的矩阵。 ds 中的三列是:
name v2 f1
- 名字是角色
- v2 是数字
- f1 是 54 级的因子
我想找到因子 x 的 v2 的最小值位置。我尝试如下使用 tapply
tapply(ds$v2, ds$f1 == x, which.min)
我得到的答案是这样的:
FALSE TRUE
2821 19
我假设 19 是我数据集中的绝对位置,如果我想找到观察的名称,我需要做的就是
ds[19, 1]
但显然这是不正确的。我知道 19 对应于相对位置,即它是因子 x 的第 19 个观察值。
所以我的问题是:如何找到因子 x 的最小值的绝对位置?
tapply
会将函数应用于第二个参数的每个唯一值,因此您不应该使用 ds$f1 == x
并且可能只使用 ds$f1
所以它看起来像:
tapply(ds$v2, ds$f1 == x, which.min)
这里以R自带的鸢尾花数据集为例:
tapply(iris$Sepal.Length, iris$Species, which.min)
编辑:
但是,正如您所指出的,这将为您提供子集数据中的位置,而不是绝对位置。
我认为不可能从 tapply
中获得绝对值,因为您正在处理单个向量。如果你想一次处理多个列,你可以使用这种方法:
d <- split(iris, iris$Species)
row_positions <- sapply(d, function(x) rownames(x[which.min(x$Sepal.Length), ]))
iris[row_positions, ]