我想重复一个向量N次但是元素方面,而不是整个向量.
例如,我有:
v <- c('a', 'b')
Run Code Online (Sandbox Code Playgroud)
说我想重复n次:
n <- 3
Run Code Online (Sandbox Code Playgroud)
我想要:
vfill <- c(rep(v[1], n), rep(v[2], n))
print(vfill)
[1] "a" "a" "a" "b" "b" "b"
Run Code Online (Sandbox Code Playgroud)
我迄今为止最好的解决方案
ffillv <- function(i) rep(v[i], n)
c(sapply(seq_len(length(v)), ffillv))
Run Code Online (Sandbox Code Playgroud)
我对快速和可扩展的解决方案感兴趣,例如使用rbind,plyr等.
使用日期时间列创建data.table时出现问题:
> mdt <- data.table(id=1:3, d=strptime(c("06:02:36", "06:02:48", "07:03:12"), "%H:%M:%S"))
> class(mdt)
[1] "data.table" "data.frame"
> print(mdt)
Error in `rownames<-`(`*tmp*`, value = paste(format(rn, right = TRUE), :
length of 'dimnames' [1] not equal to array extent
Enter a frame number, or 0 to exit
1: print(list(id = 1:3, d = list(sec = c(36, 48, 12), min = c(2, 2, 3), hour = c(6, 6, 7), mday = c(31,
2: print.data.table(list(id = 1:3, d = list(sec = c(36, 48, 12), min = …Run Code Online (Sandbox Code Playgroud) 我想在不评估完整交叉连接的情况下交叉连接两个数据表,在过程中使用测距标准.从本质上讲,我希望CJ具有过滤/范围表达.
有人可以提出一种避免完全交叉连接的高性能方法吗?
请参阅下面的测试示例,使用邪恶的完整交叉连接执行作业 .
library(data.table)
# Test data.
dt1 <- data.table(id1=1:10, D=2*(1:10), key="id1")
dt2 <- data.table(id2=21:23, D1=c(5, 7, 10), D2=c(9, 12, 16), key="id2")
# Desired filtered cross-join data table by hand: D1 <= D & D <= D2.
dtfDesired <- data.table(
id1=c(3, 4, 4, 5, 6, 5, 6, 7, 8)
, id2=c(rep(21, 2), rep(22, 3), rep(23, 4))
, D1=c(rep(5, 2), rep(7, 3), rep(10, 4))
, D=c(6, 8, 8, 10, 12, 10, 12, 14, 16)
, D2=c(rep(9, 2), rep(12, …Run Code Online (Sandbox Code Playgroud)