r - 在嵌套数据框中应用条件函数

标签 r

我有一个像这样的嵌套数据框:

df<-mpg %>% group_by(manufacturer) %>% nest()

我必须应用这个函数来清理一些值:

func<-function(drv,cty){
  values<-which(drv=="f"& cty<20)
  cty[values]<-0
  cty}

仅限这些制造商

manufacturers_vector<-c("audi","chevrolet","jeep")

只有当 df 中的制造商列与makers_vector 中的值匹配时,我才能应用该函数吗?

最佳答案

我们过滤数据,然后使用map循环遍历list'data'

library(dplyr)
library(purrr)
library(ggplot2)

df2 <- df %>%
   filter(manufacturer %in% manufacturers_vector) %>% 
   mutate(out = map(data,  ~ func(.x$drv, .x$cty))) 

-输出

df2
# A tibble: 3 x 3
# Groups:   manufacturer [3]
#  manufacturer data               out       
#  <chr>        <list>             <list>    
#1 audi         <tibble [18 × 10]> <dbl [18]>
#2 chevrolet    <tibble [19 × 10]> <dbl [19]>
#3 jeep         <tibble [8 × 10]>  <dbl [8]> 

-out列输出

df2$out
#[[1]]
# [1]  0 21 20 21  0  0  0 18 16 20 19 15 17 17 15 15 17 16

#[[2]]
# [1] 14 11 14 13 12 16 15 16 15 15 14 11 11 14  0 22  0  0  0

#[[3]]
#[1] 17 15 15 14  9 14 13 11

如果我们想保留原始数据而不使用filter,那么使用map_if

df %>% 
  mutate(out = map_if(data, .f = ~ func(.x$drv, .x$cty),
     .p = manufacturer %in% manufacturers_vector, .else = ~ NA_real_))

-输出

# A tibble: 15 x 3
# Groups:   manufacturer [15]
#   manufacturer data               out       
#   <chr>        <list>             <list>    
# 1 audi         <tibble [18 × 10]> <dbl [18]>
# 2 chevrolet    <tibble [19 × 10]> <dbl [19]>
# 3 dodge        <tibble [37 × 10]> <dbl [1]> 
# 4 ford         <tibble [25 × 10]> <dbl [1]> 
# 5 honda        <tibble [9 × 10]>  <dbl [1]> 
# 6 hyundai      <tibble [14 × 10]> <dbl [1]> 
# 7 jeep         <tibble [8 × 10]>  <dbl [8]> 
# 8 land rover   <tibble [4 × 10]>  <dbl [1]> 
# 9 lincoln      <tibble [3 × 10]>  <dbl [1]> 
#10 mercury      <tibble [4 × 10]>  <dbl [1]> 
#11 nissan       <tibble [13 × 10]> <dbl [1]> 
#12 pontiac      <tibble [5 × 10]>  <dbl [1]> 
#13 subaru       <tibble [14 × 10]> <dbl [1]> 
#14 toyota       <tibble [34 × 10]> <dbl [1]> 
#15 volkswagen   <tibble [27 × 10]> <dbl [1]> 

关于r - 在嵌套数据框中应用条件函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66359421/

相关文章:

r - 从具有交互作用的 glm 模型中为两个不同的组绘制拟合线

r - Microsoft R Server 中的 Shiny 应用程序

r - R 中的 h2o.predict 错误

r - 标记每第 n 个刻度线

r - R 中带有 R 代码的简单 OpenCL 示例?

r - 在 lapply 中增加多个参数

将所有绘图输出重定向到特定文件

R:plotmath 表达式符号未显示在交互图中

使用不可见列的 R DT 条件格式

java - 分发使用 JRI 和 R 的 Java 应用程序