如何在R data.table中选择含特定字符或指定类型的列
用data.table实现tidyverse的列筛选需求
下面分别给出对应两种tidyverseselect操作的data.table实现方法:
1. 选择列名包含"cases"的列
对应tidyverse代码:
df <- df |> select(contains("cases"))
data.table实现方式:
方法一:直接在选列时匹配
# 假设你的data.table对象名为DT DT <- DT[, grep("cases", names(DT), value = TRUE), with = FALSE]
grep("cases", names(DT), value = TRUE):返回所有列名中包含"cases"的字符串向量with = FALSE:告诉data.table将该向量视为列名进行选择
方法二:先存列名再引用(更简洁)
cols_to_keep <- grep("cases", names(DT), value = TRUE) DT <- DT[, ..cols_to_keep]
..cols_to_keep是data.table特有语法,表示引用上层环境中的cols_to_keep变量,直接选择这些列
2. 选择所有数值型列
对应tidyverse代码:
df <- df |> select(where(is.numeric))
data.table实现方式:
方法一:先筛选数值型列名
numeric_cols <- names(DT)[sapply(DT, is.numeric)] DT <- DT[, ..numeric_cols]
方法二:直接用.SD判断
DT <- DT[, which(sapply(.SD, is.numeric)), with = FALSE]
.SD是data.table的特殊符号,代表当前对象的所有列sapply(.SD, is.numeric):返回每列是否为数值型的逻辑向量which():将逻辑向量转换为列的索引,with = FALSE按索引选择列
内容的提问来源于stack exchange,提问作者B.M Njuguna
相关产品推荐
相关产品推荐

