首页 > 解决方案 > 按类型从 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)))))]))

然而,应该确定的是,没有一列是混合类型的:即包含一些字符串和一些数值。

有没有人建议更优雅或更有效地处理这个问题?

标签: rdata.table

解决方案


您可以将逻辑/字符向量传递给.SDcols.

对于字符列,我们可以做

library(data.table)
cols <- names(Filter(is.character, dt))
dt[, (cols) := lapply(.SD, tolower), .SDcols = cols]

推荐阅读