R:使用dplyr软件包获取tibble的行号

发布于 2025-01-17 13:52:10 字数 1238 浏览 0 评论 0 原文

我想获取满足某些条件的任何行的行号。

在下面的 tibble 结构中,我只想获取其中 (p = 1, d = 1 q = 1) 的行号

tbl <- tibble::tibble(p = c(0, 0, 0, 0, 1, 0, 2, 2, 2, 2), d = c(1, 1, 1, 1, 1, 1, 1, 0, 0, 0), q = c(1, 1, 1, 1, 1, 1, 1, 0, 0, 0))

tbl

小标题:10 x 3

p d p
1 0 1 1
2 0 1 1
3 0 1 1
4 0 1 1
5 1 1 1
6 0 1 1
7 0 1 1
8 2 0 0
9 2 0 0
10 2 0 0
tbl |>  dplyr::filter(p == 1, d == 1, q == 1) |> 
  dplyr::row_number()

# p d q 
# 1 2 3 

< strong>我想要的

我只想要一个可以打印的功能具有所需质量的行号,这样我就可以使生成它的函数成为一个具有名称的对象,以便在另一个函数中使用它

I want to obtain the row number of any row that satisfies certain conditions.

In my tibble formation bellow, I want to obtain only the row number in which (p = 1, d = 1 q = 1)

tbl <- tibble::tibble(p = c(0, 0, 0, 0, 1, 0, 2, 2, 2, 2), d = c(1, 1, 1, 1, 1, 1, 1, 0, 0, 0), q = c(1, 1, 1, 1, 1, 1, 1, 0, 0, 0))

tbl

A tibble: 10 x 3

p d p
1 0 1 1
2 0 1 1
3 0 1 1
4 0 1 1
5 1 1 1
6 0 1 1
7 0 1 1
8 2 0 0
9 2 0 0
10 2 0 0
tbl |>  dplyr::filter(p == 1, d == 1, q == 1) |> 
  dplyr::row_number()

# p d q 
# 1 2 3 

What I Want

I just want a function that will print the row number that has the desired quality such that I can make the function that produce it an object with a name the use it in another function

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

勿忘初心 2025-01-24 13:52:10

您可以使用以下代码:

library(dplyr)
tbl %>%
  with(which(p == 1 & d == 1 & q == 1))

输出:

[1] 5

这意味着它是数据的第 5 行。

You can use the following code:

library(dplyr)
tbl %>%
  with(which(p == 1 & d == 1 & q == 1))

Output:

[1] 5

Which means it was the 5th row of your data.

迷爱 2025-01-24 13:52:10

我们可以在或上使用过滤> if_all

library(dplyr)
tbl %>% 
    mutate(rn = row_number()) %>% 
    filter(across(p:q, `==`, 1)) %>% 
    pull(rn)
[1] 5

或使用

tbl %>% 
  summarise(rn = which(if_all(p:q, `==`, 1)))
# A tibble: 1 × 1
     rn
  <int>
1     5

或使用 base r rowsums 在逻辑矩阵

 which(rowSums(tbl == 1) == 3)
[1] 5

We could use filter with across or if_all

library(dplyr)
tbl %>% 
    mutate(rn = row_number()) %>% 
    filter(across(p:q, `==`, 1)) %>% 
    pull(rn)
[1] 5

Or using

tbl %>% 
  summarise(rn = which(if_all(p:q, `==`, 1)))
# A tibble: 1 × 1
     rn
  <int>
1     5

Or using base R with rowSums on a logical matrix

 which(rowSums(tbl == 1) == 3)
[1] 5
还如梦归 2025-01-24 13:52:10

另一种可能的解决方案:

library(dplyr)

tbl %>% 
  rowid_to_column %>% 
  filter(p == 1 & d == 1 & q == 1) %>% 
  pull(rowid)

#> [1] 5

Another possible solution:

library(dplyr)

tbl %>% 
  rowid_to_column %>% 
  filter(p == 1 & d == 1 & q == 1) %>% 
  pull(rowid)

#> [1] 5
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文