R 来自所有列组合的唯一ID
我试图基于每一列为数据帧的行生成一个唯一的ID。列是连续、字符串和逻辑的混合体。其目的是不同的排序顺序将生成相同的id。在reprex中,下面的id不同,我希望它们保持不变:R 来自所有列组合的唯一ID,r,data-manipulation,R,Data Manipulation,我试图基于每一列为数据帧的行生成一个唯一的ID。列是连续、字符串和逻辑的混合体。其目的是不同的排序顺序将生成相同的id。在reprex中,下面的id不同,我希望它们保持不变: ## Two dataframes: same data, different sorting df_1 <-structure(list(v1 = c("A", "A", "B"), v2 = c(2, 2, 2), v3 = c(5, 5, 2)), row.names = c(NA, -3L), clas
## Two dataframes: same data, different sorting
df_1 <-structure(list(v1 = c("A", "A", "B"), v2 = c(2, 2, 2), v3 = c(5, 5, 2)), row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame"))
df_2 <- df_1[order(df_1$v3) , ]
## Generate IDs
df_1$id <- rownames(df_1)
df_2$id <- rownames(df_2)
两个数据帧:相同的数据,不同的排序
df_1我不完全明白你在追求什么;一个小数据集的例子将大大有助于澄清应用(df1,1,函数(x)粘贴(排序(x),折叠=“,”))使用“连续”值作为每行唯一散列的一部分可能会有问题(但肯定不是不可能),部分原因是浮点的性质:没有
2.0
,这是2.00000000…
,因此两个不同数字的表示形式可能看起来相同(c.f.2+c(0,1e-8)
)。虽然我认为@akrun关于粘贴的建议可能是合适的,但也许你最初的问题最好通过为每一行指定一个整数来解决,即alaseq_len(nrow(x))
。我同意MichaelChirico的观点,尽管要获得更详细的帮助,最好是找一位代表(以编程方式使用data.frame(…)
或使用dput(head(x))
)。在这样做时,请小心提供应该匹配的行和看起来非常接近但不应该匹配的行的组合。添加reprex以说明我在寻找什么我并没有完全遵循您的要求;一个关于小数据集的示例将大大有助于澄清应用(df1,1,函数(x)粘贴(排序(x))的问题,collapse=“,”)使用“连续”值作为每行唯一散列的一部分可能有问题(但肯定不是不可能),部分原因是浮点的性质:没有2.0
,它是2.00000000…
,因此两个不同数字的表示形式可能是相同的(c.f.2+c(0,1e-8)
)。虽然我认为@akrun关于粘贴paste
的建议可能是合适的,但也许你最初的问题最好通过为每一行指定一个整数来解决,alaseq_len(nrow(x))
。我同意MichaelChirico的观点,尽管要获得更详细的帮助,最好是找一位代表(可以通过编程方式使用data.frame(…)
或dput(head(x))
)。在这样做时,请小心提供应该匹配的行和看起来非常接近但不应该匹配的行的组合。添加了reprex以说明我正在寻找的内容