簡體   English   中英

跨多列過濾

[英]Filtering across multiple columns

基於此數據:

library(tidyverse)

df <- tibble(
  grp = rep(c("a", "b", "c"), each = 3),
  wave = rep(1:3, times = 3),
  var1 = c(1, -2, 3, 4, 5, 1, 1, 4, -5),
  var2 = c(-1, 2, 3, -4, 5, 6, 1, 4, 5)
)

df
#> # A tibble: 9 x 4
#>   grp    wave  var1  var2
#>   <chr> <int> <dbl> <dbl>
#> 1 a         1     1    -1
#> 2 a         2    -2     2
#> 3 a         3     3     3
#> 4 b         1     4    -4
#> 5 b         2     5     5
#> 6 b         3     1     6
#> 7 c         1     1     1
#> 8 c         2     4     4
#> 9 c         3    -5     5

僅當wave介於 1 和 2 之間時,如何才能過濾掉在var1或(或兩者) var2列中具有負值的組 ( grp )。使用此數據,將僅返回組c 的數據。 我嘗試了類似以下的方法,但沒有成功。

df %>%
  group_by(grp) %>%
  filter(across(contains("var"), ~ .x[between(wave, 1, 2)] > 0))
#> Error: Problem with `filter()` input `..1`.
#> x Input `..1` must be of size 3 or 1, not size 2.
#> ℹ Input `..1` is `across(contains("var"), ~.x[between(wave, 1, 2)] > 0)`.
#> ℹ The error occurred in group 1: grp = "a".

reprex 包(v0.3.0.9001) 於 2020 年 10 月 29 日創建

這是否有效:

> library(dplyr)
> df %>% group_by(grp) %>% filter(!any((var1<0|var2<0) & between(wave,1,2)))
# A tibble: 3 x 4
# Groups:   grp [1]
  grp    wave  var1  var2
  <chr> <int> <dbl> <dbl>
1 c         1     1     1
2 c         2     4     4
3 c         3    -5     5
> 

暫無
暫無

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

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