如何增加项目标签数量并同时减少项目编号? [R

时间:2015-09-28 12:17:52

标签: r for-loop

我正在研究一个创建矢量的代码bloke但是在这个列表中我希望有19次和第二次18次,但标签必须是“V1”,“V2”。更具体一点:

 c("V1", "V1", "V1", "V1", "V1", "V1", "V1", "V1", "V1", "V1", "V1",
      "V1", "V1", "V1", "V1", "V1", "V1", "V1", "V1", "V2", "V2", "V2",
      "V2", "V2", "V2", "V2", "V2", "V2", "V2", "V2", "V2", "V2", "V2",
      "V2", "V2", "V2", "V2", "V3", "V3", "V3", "V3", "V3", "V3", "V3",
      "V3", "V3", "V3", "V3", "V3", "V3", "V3", "V3", "V3", "V3", "V4",
      "V4", "V4", "V4", "V4", "V4", "V4", "V4", "V4", "V4", "V4", "V4",
      "V4", "V4", "V4", "V4", "V5", "V5", "V5", "V5", "V5", "V5", "V5",
      "V5", "V5", "V5", "V5", "V5", "V5", "V5", "V5", "V6", "V6", "V6",
      "V6", "V6", "V6", "V6", "V6", "V6", "V6", "V6", "V6", "V6", "V6",
      "V7", "V7", "V7", "V7", "V7", "V7", "V7", "V7", "V7", "V7", "V7",
      "V7", "V7", "V8", "V8", "V8", "V8", "V8", "V8", "V8", "V8", "V8",
      "V8", "V8", "V8", "V9", "V9", "V9", "V9", "V9", "V9", "V9", "V9",
      "V9", "V9", "V9", "V10", "V10", "V10", "V10", "V10", "V10", "V10",
      "V10", "V10", "V10", "V11", "V11", "V11", "V11", "V11", "V11", "V11",
      "V11", "V11", "V12", "V12", "V12", "V12", "V12", "V12", "V12", "V12",
      "V13", "V13", "V13", "V13", "V13", "V13", "V13", "V14", "V14", "V14",
      "V14", "V14", "V14", "V15", "V15", "V15", "V15", "V15", "V16", "V16",
      "V16", "V16", "V17", "V17", "V17", "V18", "V18", "V19" )

我想创建V1的19和V2的18。这是我的代码,我可以创建19次第一项等等但是如何单独创建项目标签和项目编号?

z <- c()
for (i in 19:1){

  k <- c(paste("V",i, sep = ""))

  k <- c(k,rep(k,i-1))

  z <- c(z, c(k))  

}

2 个答案:

答案 0 :(得分:3)

对@ arkun的评论略有不同:

rep(sprintf('V%d', 1:19), c(19:1))

这里我使用sprintf来创建输入向量,请注意它是矢量化的:

sprintf('V%d', 1:19)
[1] "V1"  "V2"  "V3"  "V4"  "V5"  "V6"  "V7"  "V8"  "V9"  "V10" "V11" "V12"
[13] "V13" "V14" "V15" "V16" "V17" "V18" "V19"

其中%d表示此处应替换整数值。

接下来我们调用rep,我们必须记住(引自rep文档):

  

'times'给出(非负)数的整数向量                 重复每个元素的时间,如果长度'长度(x)',或                 如果长度为1,则重复整个向量。否定或                 'NA'值是错误的。

传递矢量19:1导致第一项重复19次,第二项18次,等等。注意19:1创建一个从19到1的向量。

答案 1 :(得分:1)

对于新问题,我们可以循环播放1:20,并使用&#39; V&#39;将每个数字的序列设置为20,unlistpaste

paste0('V', unlist(lapply(1:20, function(i) i:20)))

或者我们可以使用rep并删除一些元素

v1<- 1:20 +rep(0:20, each=20)
paste0('V', v1[v1 < 21])

发布我的评论(以及@ rbm&#39;评论)作为原始问题的解决方案。

rep(paste0('V', 1:19),c(19:1))