r - 按类型从 data.table 中选择列的最佳方法
问题描述
我正在寻找一种优雅或有效的方式来选择R
's中的列data.table
。
我个人看重灵活的方法。
因此,我倾向于按列的特征而不是名称来引用列。
例如,我想将所有列的值设置为小写。
如果我在此操作中包含所有列,就像这样
dt[, lapply(.SD, tolower),.SDcols = names(dt)]
数字和整数列也将转换为(小写)字符。
这是不可取的,因此我首先将所有字符列标识为以下内容:
char_cols <- as.character(names(dt[ , lapply(.SD, function(x) which(is.character(x)))]))
然后传递char_cols
给 .SDcols
dt[ , lapply(.SD, tolower), .SDcols = char_cols ]
相反,如果您的所有列都是字符(例如,为了避免在读取数据时出现类型转换问题),我会这样处理
char_cols <- as.character(names(dt[ , lapply(.SD, function(x) which(all(is.na(as.numeric(x)))))]))
然而,应该确定的是,没有一列是混合类型的:即包含一些字符串和一些数值。
有没有人建议更优雅或更有效地处理这个问题?
解决方案
您可以将逻辑/字符向量传递给.SDcols
.
对于字符列,我们可以做
library(data.table)
cols <- names(Filter(is.character, dt))
dt[, (cols) := lapply(.SD, tolower), .SDcols = cols]
推荐阅读
- drools - 是错误吗?Optaplanner 无法删除 ConstraintMatch
- c++ - C++ boost asio 奇怪的缓冲区溢出
- r - 根据条件用自己的值填充 R 数据表
- r - 如何通过 R 中另一行中满足的条件选择一行?
- html - 可折叠下拉列表的 HTML 标记
- php - 从数组中获取产品 ID
- c - pthread_attr_setschedparam() 返回无效参数……(Linux、C、Ubuntu 18.04.4)
- c# - 依赖注入 - 目录注入一个类到另一个类
- python - AWS ec2 无法读取 csv 文件:[Errno 13] Permission denied: '/home/ec2-user/KFSGPS2/input/real/trca.csv'
- linux - 为 Linux Mint 19.2 构建 mupdf-1.18.0 失败