【问题标题】:A problem with dplyr (applying which.min to a list of dataframes)dplyr 的问题(将 which.min 应用于数据帧列表)
【发布时间】:2020-04-17 18:33:19
【问题描述】:

在 map() 和 lapply 中使用 which() 和 which.min 存在这个问题,我只得到一个数字作为输出,但是,有多个向量值满足条件。 数据

library(dplyr)
library(purrr)
foo <- dplyr::tibble(a=c("a","b",NA),b=c("a","b","c"),colC=c("a",NA,"c"))
bar <- dplyr::tibble(a=c("a","b",NA),b=c("a","b","c"),colC=c("a",NA,"c"))
all_tibbles <- c("foo","bar")
mget(all_tibbles)
$foo
# A tibble: 3 x 3
  a     b     colC 
  <chr> <chr> <chr>
1 a     a     a    
2 b     b     NA   
3 NA    c     c    

$bar
# A tibble: 3 x 3
  a     b     colC 
  <chr> <chr> <chr>
1 a     a     a    
2 b     b     NA   
3 NA    c     c
mget(all_tibbles) %>%
  map(~ rowSums(!is.na(.x)))
$foo
[1] 3 2 2

$bar
[1] 3 2 2
mget(all_tibbles) %>% map(~ rowSums(!is.na(.x))) %>% map(~ which.min(.x))
lapply(mget(all_tibbles) %>% map(~ rowSums(!is.na(.x)) ),which.min)
$foo
[1] 2

$bar
[1] 2

如您所见,肯定不止第二列。我期待 which.min 输出 2 3

【问题讨论】:

  • 来自?which.min :“确定位置,即(第一个)数字(或逻辑)向量的最小值或最大值的索引。”

标签: r list dataframe dplyr tidyverse


【解决方案1】:

如果我们想要两个条目,请使用==,因为which.min 只返回匹配项的第一次出现

mget(all_tibbles) %>% 
     map(~ .x %>%
             mutate(new = rowSums(!is.na(.))) %>%
             filter(new == min(new)) %>% 
             select(-new))

【讨论】:

    猜你喜欢
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 2019-06-27
    • 2023-02-24
    • 2017-03-09
    • 2022-11-23
    • 2019-09-01
    相关资源
    最近更新 更多