我有以下内容
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")
Run Code Online (Sandbox Code Playgroud)
不幸的是,我在我的例子中错过了这一行
dt <- data.table(anid, agroup, anothergroup, avalue)
Run Code Online (Sandbox Code Playgroud)
基本上我想用函数创建mygoal列的值,但不幸的是我卡住了.我想用类似的东西来创建mygoal列
dt[, mygoal:= lapply(...)]
Run Code Online (Sandbox Code Playgroud)
进入函数的列数可能会有所不同,但我知道它们,但必须能够将函数列作为字符向量提供.在上面的例子中,列"agroup"和"anothergroup"用于为"mygoal"列创建值.
再一次,任何暗示都值得赞赏
汤姆
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
Run Code Online (Sandbox Code Playgroud)