gpt4 book ai didi

r - 忽略选定索引后查找一行中前 n 个元素的索引

转载 作者:行者123 更新时间:2023-12-04 11:10:17 24 4
gpt4 key购买 nike

我有一个数据框 df1 和一个列表 l1 如下:

df1 <- data.frame(c1 = c(4.2, 1.2, 3.0) , c2 = c(2.3, 1.8, 12.0 ) ,c3 = c(1.2, 3.2, 2.0 ) , c4 = c(2.2, 1.9, 0.9) )
l1 <- list(x1 = c(2,4) ,x2 = c(3) ,x3 = c(2))

其中 l1 包含要在 df1 中忽略的索引列表。现在,我想在为每一行排除列表 l1 中的索引后找到前 2 个(可以更高)元素的索引。实际数据有更多的行和列。所以,预期的输出是:

[1,]    1 3
[2,] 2 4
[3,] 1 3

哪里 df1 :

      c1   c2  c3  c4
1 4.2 2.3 1.2 2.2
2 1.2 1.8 3.2 1.9
3 3.0 12.0 2.0 0.9

如果索引可以按其占位符的值排序,那也会有帮助。那么预期的输出将是:

 [1,]    1 3
[2,] 4 2
[3,] 1 3

最佳答案

我们可以使用rank

lapply(seq_len(nrow(df1)), function(i) {
x1 <- unlist(df1[i,])
i2 <- l1[[i]]
i3 <- seq_along(x1) %in% i2
which(rank(-x1*NA^i3) %in% 1:2) })
#[[1]]
#[1] 1 3

#[[2]]
#[1] 2 4

#[[3]]
#[1] 1 3

更新

如果我们需要按顺序

lapply(seq_len(nrow(df1)), function(i) {
x1 <- unlist(df1[i,])
i2 <- l1[[i]]
i3 <- seq_along(x1) %in% i2
i4 <- which(rank(-x1*NA^i3) %in% 1:2)
i4[order(-x1[i4])]

})
#[[1]]
#[1] 1 3

#[[2]]
#[1] 4 2

#[[3]]
#[1] 1 3

关于r - 忽略选定索引后查找一行中前 n 个元素的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38095537/

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