[英]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.