【发布时间】:2014-09-15 16:56:16
【问题描述】:
考虑一下data.table:
dt <- data.table(V1=c(3,2),V2=c(4,2),V3=c(6,5),V4=c(7,8),V5=c(9,10))
> dt
V1 V2 V3 V4 V5
1: 3 4 6 7 9
2: 2 2 5 8 10
我想创建一个新列来粘贴列子集的值和名称。应保留原始列。
想要的输出是:
> cols <- paste0("V",2:3)
> dt
V1 V2 V3 V4 V5 merged
1: 3 4 6 7 9 V2:4 V3:6
2: 2 2 5 8 10 V2:2 V3:5
我能够通过将 .SD 发送到函数并遍历每一行来获得输出:
getSub <- function(SD){
lapply(1:nrow(SD), function(s) paste0(cols,":", SD[s], collapse=" "))
}
dt[, merged := list(getSub(.SD)), .SDcols=cols]
> dt
V1 V2 V3 V4 V5 merged
1: 3 4 6 7 9 V1:3 V2:4 V3:6 V4:7
2: 2 2 5 8 10 V1:2 V2:2 V3:5 V4:8
我想知道是否有办法使用像 dt[, merged := list(do.call(paste,c(c(cols,.SD),sep=" "))), .SDcols=cols] 这样的东西,因为它似乎要快得多 https://stackoverflow.com/a/23819177/2070021?
【问题讨论】:
-
如果这是关于
r,请相应地标记您的帖子。 -
@PM77-1 抱歉遗漏了。我认为 eddi 已经修复了它。
标签: r data.table