首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在增加项目标签数量的同时减少项目数量?R

如何在增加项目标签数量的同时减少项目数量?R
EN

Stack Overflow用户
提问于 2015-09-28 12:17:51
回答 2查看 59关注 0票数 0

我正在编写一个创建向量的代码库,但是在这个列表中,我希望第一项第19次,第二次18次,但是标签必须是"V1","V2“。更具体而言:

代码语言:javascript
复制
 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" )

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

代码语言:javascript
复制
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))  

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-28 12:34:20

对于阿肯的评论来说,这是一个细微的变化:

代码语言:javascript
复制
rep(sprintf('V%d', 1:19), c(19:1))

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

代码语言:javascript
复制
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文档):

给定(非负)次数的整数向量,用于重复每个元素if的长度‘length (X)’,或者重复整个向量的长度为1。负或NA值是一个错误。

因此,将它传递给向量19:1,会导致第一项重复19次,第二次重复18次,等等。注意,19:1创建了一个从19到1的向量。

票数 3
EN

Stack Overflow用户

发布于 2015-09-29 10:22:09

对于新的问题,我们可以循环1:20,得到从每个数字到20,unlistpaste与'V‘的序列。

代码语言:javascript
复制
paste0('V', unlist(lapply(1:20, function(i) i:20)))

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

代码语言:javascript
复制
v1<- 1:20 +rep(0:20, each=20)
paste0('V', v1[v1 < 21])

将我的评论(和@rbm的评论)作为最初问题的解决方案。

代码语言:javascript
复制
rep(paste0('V', 1:19),c(19:1))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32822806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档