基于数据库中所有其他列添加一列

Edi*_*man 5 r dplyr

我有一个数据库,其中有一个索引和该索引的大量列。\n我想添加一列,该列显示的值位于该索引的任何其他列中。

\n

例如:

\n
library(nycflights13)\nflights %>% \n  select(tailnum,flight) %>%\n  filter(!is.na(tailnum)) %>% \n  arrange(tailnum) %>% \n  group_by(tailnum) %>% \n  mutate(id = row_number()) %>%\n  pivot_wider(names_from = "id", values_from = "flight")\n
Run Code Online (Sandbox Code Playgroud)\n
# A tibble: 4,043 x 576\n# Groups:   tailnum [4,043]\n   tailnum   `1`   `2`   `3`   `4`   `5`   `6`   `7`   `8`   `9`  `10`  `11`  `12`  `13`  `14`  `15`  `16`\n   <chr>   <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>\n 1 D942DN   2247  1685  1959   781    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA\n 2 N0EGMQ   4579  4584  4610  4662  4661  4610  4610  4584  4610  4669  4584  4610  4669  4584  4610  4589\n 3 N10156   4560  4269  4667  4334  4298  4520  4297  4370  4352  4695  4214  4085  4370  4204  4641  4092\n 4 N102UW   1125  1830  2095  2069  2069  2071  1805  1767  1767   720   720  1103  1619  1431  1435  1288\n 5 N103US   1575  1427   975  1125  2095  2088  2053  2095  2095  2069   802  2017  2017  1691  1431  1435\n 6 N104UW   1973  1125  2053  1767  1972  1767  1767  1963  2017  1767   975  1443  1103  1987  1081  1288\n 7 N10575   4617  4352  4434  4250  4537  4572  4106  3841  4305  3817  3819  4120  4202  4393  4316  4276\n 8 N105UW   2095  2095  1767  2069  1767  1834  2053  2069  1767  2069  1767  1745   978  1081  1435  1435\n 9 N107US   1491  2095  2095  1830  2189  1972  1751  2069  2069  1767  1491  1125  1081  1987  1435  1697\n10 N108UW   1125   840  2086  2088  2088  1767  1767  2017  1767  1767  1767  1125  1987  1895  1973  1435\n
Run Code Online (Sandbox Code Playgroud)\n

我想在表末尾添加一列\xc2\xa0,显示其他列\xc2\xa0是否包含“1767”。

\n

jpd*_*o17 3

我们可以rowwise使用any.

\n
library(tidyverse)\n\nlibrary(nycflights13)\ndf <- \nflights %>% \n  select(tailnum,flight) %>%\n  filter(!is.na(tailnum)) %>% \n  arrange(tailnum) %>% \n  group_by(tailnum) %>% \n  mutate(id = row_number()) %>%\n  pivot_wider(names_from = "id", values_from = "flight")\n\ndf <- \ndf %>% \n  rowwise() %>% \n  mutate(contains_1767 = any(c_across(where(is.numeric)) == 1767, na.rm = TRUE))\n\ndf[, ncol(df)]\n#> # A tibble: 4,043 \xc3\x97 1\n#> # Rowwise: \n#>    contains_1767\n#>    <lgl>        \n#>  1 FALSE        \n#>  2 FALSE        \n#>  3 FALSE        \n#>  4 TRUE         \n#>  5 FALSE        \n#>  6 TRUE         \n#>  7 FALSE        \n#>  8 TRUE         \n#>  9 TRUE         \n#> 10 TRUE         \n#> # \xe2\x80\xa6 with 4,033 more rows\n\n\nsystem.time({df <- \n  df %>% \n  rowwise() %>% \n  mutate(contains_1767 = any(c_across(where(is.numeric)) == 1767, na.rm = TRUE))})\n#>    user  system elapsed \n#>   2.317   0.049   2.367\n
Run Code Online (Sandbox Code Playgroud)\n

由reprex 包于 2021 年 12 月 29 日创建(v2.0.1)

\n