[英]How to use dplyr::filter inside purrr::map
我有一個帶有多個變量的data.frame,我想獲得一個列表,其中每個項目都是使用條件過濾的data.frame的變量。
例如,假設我有類似的東西:
df <- tribble(
~ var1, ~ var2, ~ var3,
4, 0, 0,
2, 3, 1,
0, 4, 0
)
# var1 var2 var3
# <dbl> <dbl> <dbl>
# 1 4 0 0
# 2 2 3 1
# 3 0 4 0
我想獲得過濾的變量列表> 0
# $var1
# [1] 4 2
#
# $var2
# [1] 3 4
#
# $var3
# [1] 1
我嘗試了幾件事,但是現在我能得到的最接近的東西是
df %>% map(~filter(df, .>0))
並且我想包含dplyr::select
以僅過濾變量。 但是我不知道該怎么做。
感謝您的幫助,也很抱歉英語不好,我希望它仍然可以理解。
我們可以遍歷names
。 請注意, filter
需要data.frame/tbl_df
。 使用map
,我們遍歷各列,它是一個vector
。 因此,為了使filter
的工作, map
通過names
,子集列,應用filter
和unlist
map(names(df), ~ df %>%
select(.x) %>%
filter(. >0) %>%
unlist(., use.names = FALSE))
或與split
split.default(df, names(df)) %>%
map(~ .x %>%
filter(. > 0) %>%
pull(1))
注意:OP的問題是How to use dplyr::filter inside purrr::map
不使用dplyr::filter
其他方法是
map(df, ~ keep(.x, .x != 0))
要么
map(df, setdiff, 0)
要么
map(df, ~ discard(.x, .x == 0))
或使用base R
lapply(df, setdiff, 0)
#$var1
#[1] 4 2
#$var2
#[1] 3 4
#$var3
#[1] 1
使用purrr::map
我們可以做
purrr::map(df, ~.[.!= 0])
#$var1
#[1] 4 2
#$var2
#[1] 3 4
#$var3
#[1] 1
帶有lapply
Base R方法可能是
lapply(df, function(x) x[x!= 0])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.