我想你需要do.call
.
df <- expand.grid(c("a","b","c"),c("p","q","r"),c("x","y","z"))
do.call(paste0, df)
# [1] "apx" "bpx" "cpx" "aqx" "bqx" "cqx" "arx" "brx" "crx" "apy" "bpy" "cpy" "aqy" "bqy" "cqy" "ary" "bry" "cry" "apz" "bpz" "cpz" "aqz" "bqz" "cqz" "arz"
# [26] "brz" "crz"
既然你提到了data.table
,让我构建正确的对象:
library(data.table)
# option 1
df <- data.table(expand.grid(c("a","b","c"),c("p","q","r"),c("x","y","z")))
# option 2
df <- expand.grid(c("a","b","c"),c("p","q","r"),c("x","y","z"))
setDT(df)
# then
df[, do.call(paste0, .SD)]
# [1] "apx" "bpx" "cpx" "aqx" "bqx" "cqx" "arx" "brx" "crx" "apy" "bpy" "cpy" "aqy" "bqy" "cqy" "ary" "bry" "cry" "apz" "bpz" "cpz" "aqz" "bqz" "cqz" "arz"
# [26] "brz" "crz"
With data.table
's .SD
您可以指定某些列,例如df[, do.call(paste0, .SD), .SDcols = c(i, j, k)]
.
您需要选择的列只是一个列子集,aladf[,c(1,2,4)]
.
df <- expand.grid(c("a","b","c"),c("p","q","r"),c("x","y","z"),c("l","m","n"))
i <- 1
j <- 2
k <- 4
do.call(paste0, df[,c(i, j, k)])
# [1] "apl" "bpl" "cpl" "aql" "bql" "cql" "arl" "brl" "crl" "apl" "bpl" "cpl" "aql" "bql" "cql" "arl" "brl" "crl" "apl" "bpl" "cpl" "aql" "bql" "cql" "arl"
# [26] "brl" "crl" "apm" "bpm" "cpm" "aqm" "bqm" "cqm" "arm" "brm" "crm" "apm" "bpm" "cpm" "aqm" "bqm" "cqm" "arm" "brm" "crm" "apm" "bpm" "cpm" "aqm" "bqm"
# [51] "cqm" "arm" "brm" "crm" "apn" "bpn" "cpn" "aqn" "bqn" "cqn" "arn" "brn" "crn" "apn" "bpn" "cpn" "aqn" "bqn" "cqn" "arn" "brn" "crn" "apn" "bpn" "cpn"
# [76] "aqn" "bqn" "cqn" "arn" "brn" "crn"
正如 GregorThomas 在评论中所说,data.table
- 形式为:
as.data.table(df)[, do.call(paste0, .SD), .SDcols = c(i, j, k)]