首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构造唯一的按分组累加编号的多部分id

构造唯一的按分组累加编号的多部分id
EN

Stack Overflow用户
提问于 2016-01-31 09:28:11
回答 1查看 42关注 0票数 0

我有一个数据框:

代码语言:javascript
复制
data_source <-c("s1", "s1", "s1", "s1", "s1", "s1")
lake <-c("blue lake", "blue lake", "blue lake", "mirror lake", "mirror lake", 
         "mirror lake")
sample <-c("upper", "mid", "bottom", "upper", "mid", "bottom")
df <-data.frame(cbind(data_source, lake, sample))
df

我构造了以下id列:

代码语言:javascript
复制
df$source_id <-"s1"
df$lake_id <-paste(df$source_id, as.numeric(df$lake), sep = "_")
df$sample_id <-paste(df$lake_id, as.numeric(as.factor(df$lake_id)), sep = "_")

但是,我希望sample_id列看起来像这样:

df$desired_id <-c("s1_l1_1", "s1_l1_2", "s1_l1_3", "s1_l2_1", "s1_l2_2", "s1_l2_3")

我不知道如何计算湖边的累积样本数。提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2016-01-31 10:12:53

问题是您从不在lake_id列的湖号之前询问"l“,它会被传递到sample_id列。使用与您使用的代码类似的代码,我将执行以下操作:

代码语言:javascript
复制
df$lake_id <- with(df, paste0(source_id, "_l", as.numeric(df$lake)))
# "s1_l1" "s1_l1" "s1_l1" "s1_l2" "s1_l2" "s1_l2"

这与现在的lake_id在湖号前包含一个"l“有所不同。

现在,通过运行代码的其余部分,您的代码将具有所需的sample_id

在像这样把多个项目放在一起时,我更喜欢的编码风格是像这样使用sprintf:

代码语言:javascript
复制
df$sample_id <- with(df, sprintf("%s_l%d_%d", source_id, as.numeric(lake), as.numeric(lake)))

有了这种编码风格,就更容易看到使用了什么以及它是如何连接的--使用sprintf格式化字符串增加了复杂性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35109308

复制
相关文章

相似问题

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