假设,你有一个这样的 data.frame:
x <- data.frame(v1=1:20,v2=1:20,v3=1:20,v4=letters[1:20])
您将如何仅选择 x 中的那些数字列?
编辑:更新以避免使用不明智的sapply.
sapply
由于数据框是一个列表,我们可以使用 list-apply 函数:
nums <- unlist(lapply(x, is.numeric), use.names = FALSE)
然后标准子集
x[ , nums] ## don't use sapply, even though it's less code ## nums <- sapply(x, is.numeric)
对于更惯用的现代 R,我现在推荐
x[ , purrr::map_lgl(x, is.numeric)]
更少的代码,更少反映 R 的特殊怪癖,更直接,更健壮地用于数据库后端小标题:
dplyr::select_if(x, is.numeric)
较新版本的 dplyr,也支持以下语法:
x %>% dplyr::select(where(is.numeric))