我有以下
library(data.table)
anid <- c(1,2,3,4)
agroup <- c("m", "m", "f", "f")
anothergroup <- c("a","c", NA, "c")
avalue <- c(11, 6, 17, 3)
mygoal <- c("agroup:m_anothergroup:a","agroup:m_anothergroup:c","agroup:f_anothergroup:NA","agroup:f_anothergroup:c")
不幸的是我在我的例子中错过了这一行
dt <- data.table(anid, agroup, anothergroup, avalue)
基本上我想用函数创建mygoal列的值,但不幸的是我卡住了。我想用类似这样的东西来创建mygoal列
dt[, mygoal:= lapply(...)]
进入函数的列数可能会有所不同,但我知道它们但是必须能够将列作为字符向量提供给函数。在上面的示例中,“agroup”和“anothergroup”列用于为“mygoal”列创建值。
再一次,任何提示都值得赞赏
汤姆
答案 0 :(得分:5)
cols <- c("agroup", "anothergroup")
DT[, mygoal := do.call(paste,
c(lapply(cols, function(x) paste(x, get(x), sep=":")),
sep="_"))]
# anid agroup anothergroup avalue mygoal
#1: 1 m a 11 agroup:m_anothergroup:a
#2: 2 m c 6 agroup:m_anothergroup:c
#3: 3 f NA 17 agroup:f_anothergroup:NA
#4: 4 f c 3 agroup:f_anothergroup:c