вот некоторые решения, использующие tidyverse, с функцией select_if
и другими методами
df <- data.frame(
date = c(2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L,
2010L),
A = c(2L, 3L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L),
B = c(3L, 14L, 12L, 3L, 0L, 0L, 1L, 0L, 0L, 0L),
C = c(5L, 14L, 2L, 3L, 2L, 0L, 0L, 1L, 0L, 0L),
D = c(9L, 5L, 3L, 2L, 0L, 0L, 1L, 1L, 1L, 0L),
E = c(2L, 2L, 4L, 2L, 2L, 0L, 0L, 0L, 0L, 0L),
F = c(24L, 21L, 29L, 1L, 1L, 0L, 1L, 0L, 0L, 1L),
G = c(50L, 28L, 30L, 4L, 1L, 0L, 0L, 0L, 0L, 0L),
H = c(2L, 3L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L),
I = c(11L, 14L, 12L, 3L, 0L, 0L, 1L, 0L, 0L, 0L),
J = c(37L, 14L, 2L, 3L, 2L, 0L, 0L, 1L, 0L, 0L),
K = c(9L, 2L, 3L, 2L, 0L, 0L, 1L, 1L, 1L, 0L),
L = c(2L, 3L, 4L, 2L, 2L, 0L, 0L, 0L, 0L, 0L),
M = c(24L, 2L, 3L, 1L, 1L, 0L, 1L, 0L, 0L, 1L),
N = c(50L, 8L, 30L, 4L, 1L, 0L, 0L, 0L, 0L, 0L)
)
# using tidyverse
library(tidyverse)
# as date is > 20L, it is kept
df %>%
select_if(~ any(.x > 20))
#> date F G J M N
#> 1 2001 24 50 37 24 50
#> 2 2002 21 28 14 2 8
#> 3 2003 29 30 2 3 30
#> 4 2004 1 4 3 1 4
#> 5 2005 1 1 2 1 1
#> 6 2006 0 0 0 0 0
#> 7 2007 1 0 0 1 0
#> 8 2008 0 0 1 0 0
#> 9 2009 0 0 0 0 0
#> 10 2010 1 0 0 1 0
# in two step
bind_cols(
df %>% select(date),
df %>% select(-date) %>%
select_if(~ any(.x > 20))
)
#> date F G J M N
#> 1 2001 24 50 37 24 50
#> 2 2002 21 28 14 2 8
#> 3 2003 29 30 2 3 30
#> 4 2004 1 4 3 1 4
#> 5 2005 1 1 2 1 1
#> 6 2006 0 0 0 0 0
#> 7 2007 1 0 0 1 0
#> 8 2008 0 0 1 0 0
#> 9 2009 0 0 0 0 0
#> 10 2010 1 0 0 1 0
# using tidy data by reshaping with one column value
df %>%
gather("letters", "value", -date) %>%
# keep only group that have a value above 20
group_by(letters) %>%
mutate(to_keep = any(value > 20)) %>%
ungroup() %>%
# filter
filter(to_keep) %>%
select(-to_keep) %>%
spread(letters, value)
#> # A tibble: 10 x 6
#> date F G J M N
#> <int> <int> <int> <int> <int> <int>
#> 1 2001 24 50 37 24 50
#> 2 2002 21 28 14 2 8
#> 3 2003 29 30 2 3 30
#> 4 2004 1 4 3 1 4
#> 5 2005 1 1 2 1 1
#> 6 2006 0 0 0 0 0
#> 7 2007 1 0 0 1 0
#> 8 2008 0 0 1 0 0
#> 9 2009 0 0 0 0 0
#> 10 2010 1 0 0 1 0
Создано в 2018-12-16 с помощью пакета Представить (v0.2,1)