a=c(1,4,5,7,3,3,NA)
b=c(2,7,3,NA,2,5,2)
d=c(2,7,5,NA,9,0,1)
dat=data.frame(a,b,d)
如何从每个列中挑选出最大一个,NA被忽略了?最后的结果是一个向量,它的结论是 7、7 和 9.获得这样的结果的代码是什么?
使用sapply
遍历列。
sapply(dat, max, na.rm = TRUE)
# a b d
# 7 7 9
或者,如果您使用lapply
它将返回一个列表。sapply
可能有点不可预测,因为它调用lapply
然后尝试简化结果。这意味着,如果输入类型发生变化(例如,其中一列是列表列),您可能会得到不同的输出(例如,列表而不是向量)。
如果要确保输出是向量并在不是这种情况时抛出错误,则可以使用vapply
:
vapply(
X = dat,
FUN = max,
FUN.VALUE = numeric(1),
na.rm = TRUE
)
# a b d
# 7 7 9
使用 apply:
apply(dat, 2, max, na.rm = 1)
a b d
7 7 9
a=c(1,4,5,7,3,3,NA)
b=c(2,7,3,NA,2,5,2)
d=c(2,7,5,NA,9,0,1)
dat=data.frame(a,b,d)
sapply(dat, max, na.rm=TRUE)
a b d
7 7 9