我有一个数据表,其中包含一系列组成键的列,然后是大量其他数字列。我有一个与每列长度相同的单独向量,我想用另一个向量和原始列的乘积替换每一列。我在想办法有效地做到这一点时遇到了麻烦。我可以一栏一栏地做这个——
data <- data.table(id1=c("a","a","b","b"), id2=c("c","d","c","d"), var1=1:4, var2=5:8, var3=9:12)
setkeyv(data, c("id1", "id2"))
x <- c(10, 100, 1000, 10000)
data$var1 <- data[,var1 * x]
data
——但我最终会有数百个这样的变量。此外,列数本身是可变的,因此最好以某种方式循环列,而不必按名称调用它们。这似乎很有希望:
data <- data[,lapply(list(var2, var3), function(y) y*x)]
data
但是这样做会删除用作键的列,我想保留这些列,并且仍然需要我列出所有变量名。我正在寻找的数据框相当于:
data <- data.frame(id1=c("a","a","b","b"), id2=c("c","d","c","d"), var1=1:4, var2=5:8, var3=9:12)
for (var in grep("var", names(data))) data[,var] <- x*data[,var]
data