根据第一个非 NA 值对数据集进行子集化

Subset a data set based on first non-NA values

我有一个这样的数据框:

 Year S1  S2  S3
 1699 1   NA  NA
 1700 5   23  5
 1701 6   1   6
 1702 7   13  9

我只想保留那些第一个非 NA 年份等于或大于 1700 的列。在这种情况下,我想保留列 S2S3 但不保留 S1(因为它的第一个非 NA 年份是 1699)。

我该怎么做?

您可以使用 Filter :

result <- cbind(df1[1], Filter(function(x) 
              df1$Year[which.max(!is.na(x))] >= 1700, df1[-1]))
result
#  Year S2 S3
#1 1699 NA NA
#2 1700 23  5
#3 1701  1  6
#4 1702 13  9

像这样使用 sapply

d[c(T, sapply(d[-1], function(x) d$Year[!is.na(x)][1]) >= 1700)]
#   Year S2 S3
# 1 1699 NA NA
# 2 1700 23  5
# 3 1701  1  6
# 4 1702 13  9

数据

d <- read.table(header=TRUE, text="Year S1  S2  S3
1699 1   NA  NA
1700 5   23  5
1701 6   1   6
1702 7   13  9")