为数据中的每一行构造一个标识符字符串

edd*_*ddi 6 string r data.table

我有以下数据:

library(data.table)
d = data.table(a = c(1:3), b = c(2:4))
Run Code Online (Sandbox Code Playgroud)

并希望获得此结果(以适用于任意数量的列的方式):

d[, c := paste0('a_', a, '_b_', b)]
d
#   a b       c
#1: 1 2 a_1_b_2
#2: 2 3 a_2_b_3
#3: 3 4 a_3_b_4
Run Code Online (Sandbox Code Playgroud)

以下作品,但我希望能找到更短更清晰的东西.

d = data.table(a = c(1:3), b = c(2:4))
d[, c := apply(mapply(paste, names(.SD), .SD, MoreArgs = list(sep = "_")),
               1, paste, collapse = "_")]
Run Code Online (Sandbox Code Playgroud)

Ric*_*rta 3

一种方法,只是稍微干净一点:

d[, c :=  apply(d, 1, function(x) paste(names(d), x, sep="_", collapse="_")) ]

     a b       c
1: 1 2 a_1_b_2
2: 2 3 a_2_b_3
3: 3 4 a_3_b_4
Run Code Online (Sandbox Code Playgroud)