gpt4 book ai didi

r - 提取第 N 次出现的行号

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

是否有一种简单的方法(或任何方法)来提取数据框中 R 中某些条件第 n 次出现的行号?假设我有一个包含 30 列的数据框,所有这些列都是相同类型的值。我想从第 2 次出现某种情况的每一列中提取行号。提取与条件匹配的所有行的计数非常简单,但我不知道如何提取与第 n 次出现的条件匹配的行。

我正在考虑将数据框转换为列表,在每个数据框中添加一个累积和列,并在累积和达到 4 时获取行索引(例如)。但是,一定有比这更简单的方法。

例子:

#create data
example<-replicate(30,rnorm(n=10))

#pseudo code
which(row of 2nd negative number for each column)
print row number that satisfies condition for each column

如果我能弄清楚如何提取第 n 次出现,我想我可以只使用 apply()。我几乎尝试了所有方法并进行了全面搜索,但仍然很难过。任何帮助将不胜感激。

最佳答案

我们有几列要检查小于零的值(我使用 5 列来保持输出简短,但解决方案适用于任意数量的列)。

set.seed(123)
example <- replicate(5, rnorm(n = 10))

我们可以使用which来查找单个列中值小于0的行号

which(example[, 4] < 0)
#> [1] 2 8 9 10

但我们只对第二个实例感兴趣,一个值小于零

which(example[, 4] < 0)[2]
#> [1] 8

您可以使用 sapply 对所有列执行此操作(最初由 @d.b 在评论中提供)

sapply(as.data.frame(example), function(x) which(x < 0)[2])
#> V1 V2 V3 V4 V5
#> 2 8 2 8 2

sapply(1:NCOL(example), function(i) which(example[,i] < 0)[2])
#> [1] 2 8 2 8 2

或者,如果您更喜欢 tidyverse 方法,您可以使用 dplyr::summarise_all

library(dplyr)
as_tibble(example) %>% summarise_all(function(x) which(x < 0)[2])
#> # A tibble: 1 x 5
#> V1 V2 V3 V4 V5
#> <int> <int> <int> <int> <int>
#> 1 2 8 2 8 2

关于r - 提取第 N 次出现的行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46395632/

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