我有一个有很多列的数据框.我想创建一个名为"id"的新列,为"sample"列中的每组相同值提供唯一的id号.

示例数据:

# dput(df)
df <- structure(list(index = 1:30, val = c(14L, 22L, 1L, 25L, 3L, 34L, 
35L, 36L, 24L, 35L, 33L, 31L, 30L, 30L, 29L, 28L, 26L, 12L, 41L, 
36L, 32L, 37L, 56L, 34L, 23L, 24L, 28L, 22L, 10L, 19L), sample = c(5L, 
6L, 6L, 7L, 7L, 7L, 8L, 9L, 10L, 11L, 11L, 12L, 13L, 14L, 14L, 
15L, 15L, 15L, 16L, 17L, 18L, 18L, 19L, 19L, 19L, 20L, 21L, 22L, 
23L, 23L)), .Names = c("index", "val", "sample"), class = "data.frame", 
row.names = c(NA, -30L))

head(df)
  index val sample 
1     1  14      5  
2     2  22      6  
3     3   1      6  
4     4  25      7  
5     5   3      7  
6     6  34      7  

最后我想说的是:

  index val sample id
1     1  14      5  1
2     2  22      6  2
3     3   1      6  2
4     4  25      7  3
5     5   3      7  3
6     6  34      7  3

推荐答案

怎么样

df2 <- transform(df,id=as.numeric(factor(sample)))

?

我认为这个(从Add ID column by group抄袭而来)应该更有效一些,尽管可能更难记住:

df3 <- transform(df, id=match(sample, unique(sample)))
all.equal(df2,df3)  ## TRUE

如果要在tidyverse中执行此操作:

library(dplyr)
df %>% group_by(sample) %>% mutate(id=cur_group_id())

R相关问答推荐

为什么predicate.lm给出的是一个长度与我解析的数据集不同的载体?

如何将Rmarkdown中包含图像和文本的行的两个单元格与.PDF输出垂直对齐?

指定要保留在wrap_plots中的传奇

使用gggrassure减少地块之间的空间

带有叠加饼图系列的Highmap

任意列的欧几里得距离

格点中指数、双曲和反双曲模型曲线的正确绘制

在R中为马赛克图中的每个字段着色

为什么舍入POSIXct会更改能力以匹配等效的POSIXct?

在另存为PNG之前隐藏htmlwidget绘图元素

打印XTS对象

将Posict转换为数字时的负时间(以秒为单位)

在GG图中绘制射线的自动程序

如何在科学记数法中显示因子

如何根据R中其他变量的类别汇总值?

查找所有站点的最小值

如何计算R glm probit中的线性预测因子?

计算Mean by分组和绑定到R中的数据集

按镜像列值自定义行顺序

R:使用ApexCharge更改标签在饼图中的位置