gpt4 book ai didi

基于多个条件的排名

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

我有一个如下所示的数据集 (nm),其中前三列显示用户是否正在使用该产品,即 1(是)或 0(不)。接下来的三列显示喜欢 A_TT 对应于 A_TT_1.1 的产品的百分比是多少,同样:

nm

A_TT B_TT C_TT A_TT_1.1 B_TT_2.1 C_TT_3.1
0 0 1 0.06 0.84 0.89
1 1 0 0.92 0.83 0.94
0 1 0 0.09 0.9 0.13
1 0 1 0.87 0.05 0.9
0 0 0 0.13 0.11 0.14

我想在数据集(nm)中添加两列,即 Rank1 和 Rank2,它在满足以下两个条件的情况下排名前两个百分比:

a) 仅选择前三列中值为“零”的位置并进行排名
b) 在排名列中,它应该返回它的列名。

最终输出应该是:

nm

A_TT B_TT C_TT A_TT_1.1 B_TT_2.1 C_TT_3.1 Rank 1 Rank 2
0 0 1 0.06 0.84 0.89 B_TT_2.1 A_TT_1.1
1 1 0 0.92 0.83 0.94 C_TT_3.1 NONE
0 1 0 0.09 0.9 0.13 C_TT_3.1 A_TT_1.1
1 0 1 0.87 0.05 0.9 B_TT_2.1 NONE
0 0 0 0.13 0.11 0.14 C_TT_3.1 A_TT_1.1

我尝试了很多选项,但没有任何效果。在此先感谢您提供解决方案。

最佳答案

我们可以通过 apply 指定 MARGIN = 1 来遍历行

nm[paste0("Rank", 1:2)] <-  t(apply(nm, 1, FUN = function(x)  {
i1 <- !x[1:3] #logical index giving TRUE for 0
x1 <- x[4:6][i1] #subset elements 4:6 based on i1
names(x1[order(-x1)])[1:2] #order the 'x1', extract names
}))
nm
# A_TT B_TT C_TT A_TT_1.1 B_TT_2.1 C_TT_3.1 Rank1 Rank2
#1 0 0 1 0.06 0.84 0.89 B_TT_2.1 A_TT_1.1
#2 1 1 0 0.92 0.83 0.94 C_TT_3.1 <NA>
#3 0 1 0 0.09 0.90 0.13 C_TT_3.1 A_TT_1.1
#4 1 0 1 0.87 0.05 0.90 B_TT_2.1 <NA>
#5 0 0 0 0.13 0.11 0.14 C_TT_3.1 A_TT_1.1

注意:最好将 NA 作为缺失值,而不是“NONE”,因为使用函数 is.na/complete.cases/na 更容易删除这些值。 rm/na.省略

关于基于多个条件的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39654467/

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