R 按列中最后一个非NA值子集df
我的数据框如下所示:R 按列中最后一个非NA值子集df,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年 我怎样才能做到这
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年
我怎样才能做到这一点呢?不确定是否有更好的方法来实现这一点(但我确实希望如此)。与此同时,你可以
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)
库(tidyverse)
cols_to_keep%
枢轴_更长(-Year)%>%
分组单位(名称)%>%
汇总(var=min(年[is.na(值)])>=2020)%>%
过滤器(var)%>%
拉(名字)
df%>%
选择(年份、要保留的列)
一个简单的更基本的答案
explaution-columnwise(即应用中的arg2解释)迭代检查除第一列之外的所有数据库上的给定条件。C用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
df