一列中的重复项排除了times值对应的一项

Repeating items in a column excluding the one item corresponding to times value

下面给定的 R 脚本重复给定名称 4 次。我需要做的是,对于每个 "times" 值,与时间值对应的元素不会出现,例如对于 times = "1",只应出现 "David"、"Murdoch"、"August",对于 times = "2"、"Robert"、"Murdoch"、"August",对于times = 3,应该出现"Robert","David","August"等等。最后我应该得到总共 12 个值在这里重复。目前是 16。请帮助我提供一个没有循环的可扩展解决方案,如果我需要在大数据上应用它,那么速度很快。此外,如果 "rep" 函数可以替换为更快的解决方案。谢谢,请帮忙。

names <- c("Robert","David","Murdoch","August")
names_rep <- rep(names, times = 4)

我不认为 rep 是这里的正确功能。您可以使用 sapply 来完成,我们可以跳过相应的索引位置。

c(sapply(seq_along(names), function(x) names[-x]))

#[1] "David"   "Murdoch" "August"  "Robert"  "Murdoch" "August" 
#[7] "Robert"  "David"   "August"  "Robert"  "David"   "Murdoch"

我们可以用rep创建然后删除元素

v1 <- rep(names, 4)
v1[-seq(1, length(v1), by = 5)]
#[1] "David"   "Murdoch" "August"  "Robert"  "Murdoch"
#[6] "August"  "Robert"  "David"   "August"  "Robert"  "David"  
#[12] "Murdoch"