#r
#r
Вопрос:
Мой фрейм данных выглядит следующим образом:
Year aquil_7 aquil_8 aquil_9
2018 NA 201 222
2019 192 145 209
2020 166 121 NA
2021 190 NA NA
Я хочу подмножить этот фрейм данных так, чтобы включать только те столбцы, в которых последний год, отличный от NA, равен или меньше 2020 года. В приведенном выше примере это означает удаление aquil_7
столбца, поскольку его последний год, отличный от NA, — 2021.
Как я мог это сделать?
Ответ №1:
Простой базовый ответ.
Объяснение — итерация по столбцам (объясняющая аргумент 2 в apply) для проверки заданных условий во всей базе данных, кроме первого столбца. привязка результата с помощью T, чтобы результат включал первый столбец.
df <- read.table(text = "Year aquil_7 aquil_8 aquil_9
2018 NA 201 222
2019 192 145 209
2020 166 121 NA
2021 190 NA NA", header = T)
df[c(T, apply((!is.na(df[-1]))*df$Year, 2, function(x){max(x) < 2021}))]
Year aquil_8 aquil_9
1 2018 201 222
2 2019 145 209
3 2020 121 NA
4 2021 NA NA
Ответ №2:
Не уверен, есть ли лучший способ реализовать это (но я надеюсь на это). В то же время вы могли бы, например, сделать
library(tidyverse)
cols_to_keep <- df %>%
pivot_longer(-Year) %>%
group_by(name) %>%
summarize(var = min(Year[is.na(value)]) >= 2020) %>%
filter(var) %>%
pull(name)
df %>%
select(Year, cols_to_keep)