根据第一个非 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 的列。在这种情况下,我想保留列 S2
和 S3
但不保留 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")
我有一个这样的数据框:
Year S1 S2 S3
1699 1 NA NA
1700 5 23 5
1701 6 1 6
1702 7 13 9
我只想保留那些第一个非 NA 年份等于或大于 1700 的列。在这种情况下,我想保留列 S2
和 S3
但不保留 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")