gpt4 book ai didi

r - 来自逻辑矩阵的紧凑字母显示

转载 作者:行者123 更新时间:2023-12-04 23:00:21 25 4
gpt4 key购买 nike

我想知道是否有办法将比较的逻辑矩阵转换为多重比较测试中使用的字母符号。如 multcomp::cld .

我拥有的数据如下所示:

test_data <- data.frame(mean=c(1.48, 1.59, 1.81,1.94),CI_lower=c(1.29,1.38,1.54, 1.62),CI_upper=c(1.56,1.84, 2.3, 2.59))

mean CI_lower CI_upper
1 1.48 1.29 1.56
2 1.59 1.38 1.84
3 1.81 1.54 2.30
4 1.94 1.62 2.59

我感兴趣的是一个表示哪些条目具有重叠 CI 以获得最终结果的符号,如下所示:
final <- data.frame(mean=c(1.48, 1.59, 1.81,1.94),CI_lower=c(1.29, 1.38,1.54, 1.62),CI_upper=c(1.56,1.84, 2.3, 2.59),letters = c("a","ab","ab","b"))

mean CI_lower CI_upper letters
1 1.48 1.29 1.56 a
2 1.59 1.38 1.84 ab
3 1.81 1.54 2.30 ab
4 1.94 1.62 2.59 b

我做了一个可怜的尝试,是这样的:
same <- outer(test_data$CI_lower, test_data$CI_upper,"-")
same <- same<0
same <- lower.tri(same, diag = FALSE) & same

same_ind <- which(same,arr.ind = T)

groups <- as.list(as.numeric(rep(NA,nrow(test_data))))

for(i in 1:nrow(same_ind)){
group_pos <- as.numeric(same_ind[i,])
for(i2 in group_pos){
groups[[i2]] <- c(groups[[i2]],i)
}
}

letters_notation <- sapply(groups,function(x){
x <- x[!is.na(x)]
x <- letters[x]
x <- paste0(x,collapse="")
return(x)
}
)

这将给出:
  mean CI_lower CI_upper letters
1 1.48 1.29 1.56 ab
2 1.59 1.38 1.84 acd
3 1.81 1.54 2.30 bce
4 1.94 1.62 2.59 de

关于如何做到这一点的任何想法?

最佳答案

这是使用 data.table 的可能解决方案非常高效 foverlaps功能。这不是您想要的输出(因为我不完全理解它)但您可以从中识别重叠点

library(data.table)
setkey(setDT(test_data), CI_lower, CI_upper)
Overlaps <- foverlaps(test_data, test_data, type = "any", which = TRUE) ## returns overlap indices
test_data[ , overlaps := Overlaps[, paste(letters[yid], collapse = ""), xid]$V1][]
# mean CI_lower CI_upper overlaps
# 1: 1.48 1.29 1.56 abc <~~ not overlapping with d
# 2: 1.59 1.38 1.84 abcd
# 3: 1.81 1.54 2.30 abcd
# 4: 1.94 1.62 2.59 bcd <~~ not overlapping with a

关于r - 来自逻辑矩阵的紧凑字母显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27293770/

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