【问题标题】:assign unique ID name to unique rows with multiple columns将唯一 ID 名称分配给具有多列的唯一行
【发布时间】:2014-09-19 09:21:14
【问题描述】:

抱歉,不知道如何在问题框中插入 data.table。

我有一个包含大量这样行的数据集:

phylum class family order genus species
A      B     C      D     E     NA
A      B     C      D     E     NA
A      B     C      D     NA    NA
A      B     C      D     E     F
A      B     C      D     NA    NA
A      B     C      D     E     F 

我希望为每个匹配的行分配一个唯一的 ID,例如:

 ID phylum class family order genus species
 1  A      B     C      D     E     NA
 1  A      B     C      D     E     NA
 2  A      B     C      D     NA    NA
 3  A      B     C      D     E     F
 2  A      B     C      D     NA    NA
 3  A      B     C      D     E     F 

我尝试过以多种方式使用 GRP,但都不起作用。 例如: DT2 = DT[,i:=.GRP,by=key(DT)]

我查看了其他示例,但一切都是基于单个或仅 2 列值分配 ID,我想使用 6 个不同的。任何帮助是极大的赞赏。

【问题讨论】:

  • 这里的key(DT) 是什么? := 通过引用分配。您无需将其分配回DT2 btw。

标签: r dataframe unique data.table


【解决方案1】:

基于 R 的解决方案:

df2 <- unique(df)
df2$ID <- 1:nrow(df2)
merge(df, df2)

或使用data.table:

dt[, ID := .GRP, by = names(dt)]

【讨论】:

  • 没有办法一举搞定吗?为了做到这一点,我必须删除太多列。如果我可以指定用于唯一标识的列会有所帮助。
  • 尝试df2&lt;-unique(df[,tokeep]),其中tokeep 是一个数组,指示您要保留哪些列。
  • 这是否意味着所有其他列都将被丢弃?我只想标记那些相似的分类群,但保留指定它们来自的列以及看到的数量。加上其他一些东西。
  • 您是否尝试执行这些命令?不,这些列不会被丢弃。 tokeep 列只是定义唯一的行。首先,您只使用定义唯一值的列定义一个新数据框,然后分配 id,最后将旧数据框与新数据框合并。
  • 谢谢尼古拉。我是这样做的,但想知道是否有办法不必生成和合并两个不同的文件。我现在就这样做。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 2014-01-04
  • 2019-07-29
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
相关资源
最近更新 更多