重复列中的项目,不包括与时间值对应的一个项目

时间:2018-01-11 07:07:44

标签: r dataframe dplyr repeat

下面给出的R脚本重复给定的名字4次。我需要这样做,当对于每个“时间”值时,对应于时间值的元素不出现,例如,对于时代=“1”,只有“大卫”,“默多克”,“八月”应出现,时间=“2”,“罗伯特”,“默多克”,“八月”,时间= 3,“罗伯特”,应该出现“大卫”,“八月”等。最后,我应该在这里重复总共12个值。目前它是16.请帮助我一个没有循环的可扩展解决方案,如果我需要将其应用于大数据,这是快速的。此外,如果“rep”功能可以用更快的解决方案替换。谢谢,请帮助。

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

2 个答案:

答案 0 :(得分:2)

我不认为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"

答案 1 :(得分:1)

我们可以使用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"