【发布时间】:2014-03-13 05:57:13
【问题描述】:
假设我有一个数据框,其中一些整列是NA,如下所示:
set.seed(0)
data <- data.frame(A = rnorm(10, 10, 1),
B = rnorm(10, 12, 2),
C = rep(NA, 10))
如果我在列中应用min(),我会得到我希望的输出:
apply(data, 2, min)
# A B C
# 8.460050 9.524923 NA
但是,当我应用which.min() 时,我的输出是一个列表,而C 列给出的是integer(0):
apply(data, 2, which.min)
# $A
# [1] 6
# $B
# [1] 10
# $C
# integer(0)
我可以通过这个相当丑陋的解决方法让它看起来像我想要的那样:
which.mins <- unlist(apply(data, 2, which.min))
which.mins[names(data)[!(names(data) %in% names(which.mins))]] <- NA
which.mins
# A B C
# 6 10 NA
有没有更好的方法来做到这一点,可以模仿我在使用apply() 和min() 时得到的输出?
【问题讨论】: