(这是我的第一个问题,如果我没有正确询问,请告诉我,请分享一些关于如何改进我的问题提出技巧的反馈)
我的数据集名为ds,是一个包含三列和4000多个观测值的矩阵。 ds中的三列是:
name v2 f1
我想找到因子x的v2的最小位置。我尝试按如下方式使用tapply
tapply(ds$v2, ds$f1 == x, which.min)
我得到的答案是这样的:
FALSE TRUE
2821 19
我假设19是我数据集中的绝对位置,如果我想找到观察的名称,我需要做的就是
ds[19, 1]
但显然这是不正确的。我已经知道19对应于相对位置,即它是因子x的第19次观察。
所以我的问题是:如何找到因子x的最小值的绝对位置?
答案 0 :(得分:0)
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, ]