【发布时间】:2017-08-28 09:59:50
【问题描述】:
我的数据集名为 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对此非常混乱,比如tapply(1:nrow(iris), iris$Species, function(i) i[which.min(iris$Sepal.Length)])。如果您愿意使用 dplyr 或 data.table 之类的包,则可以使用一些更直观的语法。或者,by()函数可能会有所帮助:stackoverflow.com/a/24070835