gpt4 book ai didi

r - 创建唯一 ID 变量作为变量组合

转载 作者:行者123 更新时间:2023-12-01 09:24:20 25 4
gpt4 key购买 nike

我有一个数据框( df )或数据表( dt ),假设有 1000 个变量和 1000 个观察值。我检查了观察中没有重复项,所以 dt[!duplicated(dt)]与原始文件的长度相同。

我想用我拥有的 1000 个变量中的一些变量的组合为所有这些观察创建一个 ID 变量。 与其他 SO 问题不同,因为我不知道哪些变量更适合创建 ID,而且我可能需要至少 3 或 4 个变量的组合。

R 中是否有任何包/函数可以让我获得最有效的变量组合来创建 ID 变量?在我的真实示例中,我正在努力手动创建 ID,这可能不是变量的最佳组合。

使用 mtcars 的示例:

require(data.table)
example <- data.table(mtcars)
rownames(example) <- NULL # Delete mtcars row names
example <- example[!duplicated(example),]
example[,id_var_wrong := paste0(mpg,"_",cyl)]
length(unique(example$id_var_wrong)) # Wrong ID, there are only 27 different values for this variable despite 32 observations

example[,id_var_good := paste0(wt,"_",qsec)]
length(unique(example$id_var_good)) # Good ID as there are equal number of unique values as different observations.

有什么函数可以找到 wtqsec自动而不是手动?

最佳答案

一个自制的算法:原理是贪婪地取元素数量最多的变量,然后只过滤剩余的重复行并进行迭代。这并没有给出最好的解决方案,但它是一种快速获得相当好的解决方案的简单方法。

set.seed(1)
mat <- replicate(1000, sample(c(letters, LETTERS), size = 100, replace = TRUE))

library(dplyr)

columnsID <- function(mat) {
df <- df0 <- as_data_frame(mat)
vars <- c()
while(nrow(df) > 0) {
var_best <- names(which.max(lapply(df, n_distinct)))[[1]]
vars <- append(vars, var_best)
df <- group_by_at(df0, vars) %>% filter(n() > 1)
}
vars
}

columnsID(mat)
[1] "V68" "V32"

关于r - 创建唯一 ID 变量作为变量组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45299824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com