data.table使用字符名称一次分配多列

时间:2019-02-15 14:23:20

标签: r data.table

我喜欢为特定行子集在data.table中分配多个新变量。新的变量名称以字符变量形式给出。我尝试了几件事,但没有成功:

DT <- as.data.table(iris)

row.filter.var <- "Species"
new.var.name1 <- "new1"
new.var.name2 < "new2"
var1 <- "Sepal.Length"
var2 <- "Petal.Width"

# Try 1:
# Works, but new variable names are new.var.name1 and not "new1" etc
DT <-
 DT[get(row.filter.var) == "setosa", `:=`(new.var.name1 = get(var1) / Sepal.Width,
                                          new.var.name2 = get(var2) + get(var1))]

# Try 2: With eval (gives an error)
DT <- DT[get(row.filter.var) == "setosa", `:=`(eval(new.var.name1) = get(var1) / Sepal.Width,
                                               eval(new.var.name2) = get(var2) + get(var1))]

# Try 3: With () (does not work)
DT <- DT[get(row.filter.var) == "setosa", `:=`((new.var.name1) = get(var1) / Sepal.Width,
                                               (new.var.name2) = get(var2) + get(var1))]

# Try 4 with get     
DT <- DT[get(row.filter.var) == "setosa", `:=`(get(new.var.name1) = get(var1) / Sepal.Width,
                                               get(new.var.name2) = get(var2) + get(var1))]

# Try 5 with = FALSE
DT <- DT[get(row.filter.var) == "setosa", `:=`(new.var.name1 = var1 / "Sepal.Width",
                                               new.var.name2 = var2 + var1), with = FALSE]

0 个答案:

没有答案