[英]Subset a df by the last non-NA value in a column
我的 dataframe 看起来像这样:
Year aquil_7 aquil_8 aquil_9
2018 NA 201 222
2019 192 145 209
2020 166 121 NA
2021 190 NA NA
我想对这个 dataframe 进行子集化,以便仅包括最后一个非 NA 年等于或小于 2020 年的那些列。在上面的示例中,这意味着删除aquil_7
列,因为它的最后一个非 NA 年是 2021 年。
我怎么能这样做?
不确定是否有更好的方法来实现这一点(但我确实希望如此)。 与此同时,你可以例如做
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)
一个简单的 baseR 答案。
说明 - 逐列(在应用中解释 arg 2)迭代以检查除第一列之外的所有数据库的给定条件。 用 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.