R map_dbl() 提取字符

  • 本文关键字:提取 字符 dbl map r
  • 更新时间 :
  • 英文 :


这是一个初学者愚蠢的R问题:

df <- tribble(  
~x,
list(a = 1, b = 2),
list(a = 2, c = 4)
)
df %>%
mutate(
a = map_dbl(x, "a"),   
b = map_dbl(x, "b", .null = NA_real_)
)

问题 1:在帮助或 RSiteSearch() 中,我不为 .null 提供任何资金。 我在哪里可以学习使用它的适当时间?

问题2:在帮助中,我总是看到这个:map_dbl(.x,.f,...)。 什么是"..."对于函数来说,什么是/是否可以接受的参数?

我在?map_dbl文档中找不到任何与.null有关的内容。

...用作可传递给函数.f附加参数。这类似于许多其他功能中存在的内容,例如?aggregate.要理解这一点,请考虑此示例。

df <- structure(list(a = 1:2, b = list(c(1, 2), c(2, NA))), row.names = c(NA, 
-2L), class = c("tbl_df", "tbl", "data.frame"))
df
#      a b        
#  <int> <list>   
#1     1 <dbl [2]>
#2     2 <dbl [2]>
df$b
#[[1]]
#[1] 1 2
#[[2]]
#[1]  2 NA

请注意,b的第二个元素中有NA值。

为了使用map_dbl来表示b中的每个列表,我们可以这样做:

library(dplyr)
library(purrr)
df %>% mutate(c = map_dbl(b, mean))
#     a b             c
#  <int> <list>    <dbl>
#1     1 <dbl [2]>   1.5
#2     2 <dbl [2]>  NA  

要忽略NA值,我们需要在可以使用...部分的mean中传递na.rm = TRUE

df %>% mutate(c = map_dbl(b, mean, na.rm = TRUE))
#     a b             c
#  <int> <list>    <dbl>
#1     1 <dbl [2]>   1.5
#2     2 <dbl [2]>   2  

如果使用匿名函数或公式样式语法,则可以忽略...部分。

df %>% mutate(c = map_dbl(b, ~mean(., na.rm = TRUE)))

我们可以使用sapply

df %>%
mutate(c = sapply(b, mean, na.rm = TRUE))
# A tibble: 2 x 3
#     a b             c
#  <int> <list>    <dbl>
#1     1 <dbl [2]>   1.5
#2     2 <dbl [2]>   2  

最新更新