簡體   English   中英

如何在 map function 在 R 中使用 ifelse

[英]How to use ifelse inside map function in R

我在map function 中遇到了這個ifelse語句的問題:

df<-list(mtcars,mtcars)

我要做的就是以這種方式組織此列表中的每個 dataframe: slice(x,c(n(),2:(n()-1),1))

map(df, ~   slice(.x,c(n(),2:(n()-1),1)))   # it works well. 

但是當我設置條件x$cyl == 4時,我不能在 ifelse 中執行此操作:

map(df, ~   ifelse(sum(.x$cyl == 4) > 0, slice(.x,c(n(),2:(n()-1),1)), .x)) # The output is weird

我嘗試使用 lapply 做同樣的事情,但它不起作用:

lapply(df, function(x) ifelse(sum(x$cyl == 4) > 0, slice(x,c(n(),2:(n()-1),1)),x))

有什么幫助嗎?

只有當條件為 TRUE 時,我們才能使用map_if來應用 function。

library(tidyverse)

df <- list(mtcars,mtcars)

df2 <- map_if(df, .p = function(y) any(y$cyl == 4),
                  .f = ~slice(.x, c(n(), 2:(n()-1), 1)))

這種方法檢查列表中的每個 data.frame 是否存在cyl == 4的任何行。 如果滿足該條件,則返回所需的切片。 否則,data.frame 原封不動地返回。

library(dplyr)


df<-list(mtcars,mtcars)



lapply(df, function(x) {
  if (any(x$cyl == 4)) {
    slice(x, c(n(), 2:(n()-1), 1)) 
    } else { 
      x 
    }
  })

如果您更喜歡map

library(dplyr)
library(purrr)

df<-list(mtcars,mtcars)



map(df, ~ 
  if (any(.x$cyl == 4)) {
    slice(.x, c(n(), 2:(n()-1), 1)) 
    } else { 
      .x 
    }
  )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM