r - 仅当项目在 R 中出现多次时才添加索引
问题描述
输入:
x <- list("&a", NULL, "&b", "&a", "", "&c", "&c", "&a", list())
期望的输出:
如果项目出现多次并且项目的长度不是 0、NULL 或空字符串,则添加索引
list("&a(1)", NULL, "&b", "&a(2)", "", "&c(1)", "&c(2)", "&a(3)", list())
我尝试了什么:
它可以工作,但肯定看起来不优雅/高效。
x <- list("&a", NULL, "&b", "&a", "", "&c", "&c", "&a", list())
tbl <- table(unlist(x))
for(name in names(tbl)){
idx <- which(name == x)
if(nchar(name) & length(idx)) x[idx] <- glue("{name}({1:length(idx)})")
}
x
如果问题更适合代码审查,我当然会迁移它。
解决方案
您可以使用duplicated
来查找重复和使用paste0
并向seq_along
它们添加索引:
for(name in unique(x[duplicated(x) & x!=""])) {
i <- which(name == x)
x[i] <- paste0(x[i],"(",seq_along(i),")")
}
x
#[[1]]
#[1] "&a(1)"
#
#[[2]]
#NULL
#
#[[3]]
#[1] "&b"
#
#[[4]]
#[1] "&a(2)"
#
#[[5]]
#[1] ""
#
#[[6]]
#[1] "&c(1)"
#
#[[7]]
#[1] "&c(2)"
#
#[[8]]
#[1] "&a(3)"
#
#[[9]]
#list()
推荐阅读
- spring - com.code.service.BookServiceImpl 中的字段 bookRepository 需要找不到类型为“com.myAppp.code.respository.BookRepository”的 bean
- php - Prestashop multishop 脚本将产品关联到二级商店
- gnuplot - Gnuplot 填充曲线翻转轴
- laravel - 如何区分 laravel 5.5 auth::routes() 因为它在前端和后端创建相同名称的路由
- config - 普罗米修斯目标管理
- ios - UITableView Animation Bug - 动画前计算的可见区域
- svn - “svn ls -rNNN”和“svn ls URL@NNN”有什么区别?
- ember.js - Ember - 在浏览器上点击刷新重定向到以前的控制器?
- php - Symfony 站点 robots.txt 无法访问
- apache - 从 webhost 移动到本地 Synology 主机后 htaccess 不起作用