连接列名称和列值

时间:2014-08-17 12:26:43

标签: r data.table

我有以下

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”列创建值。

再一次,任何提示都值得赞赏

汤姆

1 个答案:

答案 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