标准化列名 - 搜索一组列名,然后使用可用于新标准化列的名称

standardize column names - search for a set of column names and then use the one available for the new standardized columns

我正在准备和标准化数据。标准化列名称的一部分。我用 data.table.

我想要的是:我想创建一个新的标准化列名(自定义)并设置我的代码,以便它在原始数据中搜索特定的列名向量,如果它找到任何这些列然后用它来填写标准化的列名。

我很欣赏它可能不清楚,所以这里有一个例子。在 belwo 中,我想创建新的标准化列名称 WEIGHT。我想在 dat 中搜索其中任何一个 (wtWTWTBL) 的 colnames,如果找到其中一个,则将其用于新列 WEIGHT

library(data.table)
library(car)
dat <- as.data.table(mtcars)

dat[, WEIGHT := wt]  #this is what we do normally - but i want to make it semiautomatic so that i search for a vector of column names and use the one that is avalble to fill in the WEIGHT columes.

dat[, WEIGHT := colnames(dat%in%c('wt','WT','WTBL'))] #this is wrong and there where i need help!

这可能有一个更简单的构造,但这里是一个尝试。 mget() 尝试按顺序获取每个值,如果找不到则返回 NULL

然后用第一个非NULL值覆盖:

dat[, WEIGHT := {
    m <- mget(c("WTBL","wt","WT"), ifnotfound=list(NULL))
    m[!sapply(m, is.null)][1]
}]