У меня есть такой фрейм данных:
Year S1 S2 S3
1699 1 NA NA
1700 5 23 5
1701 6 1 6
1702 7 13 9
Я хочу сохранить только те столбцы, в которых первый год, не относящийся к Северной Америке, равен или больше 1700. В этом случае я хочу сохранить столбцы S2
и S3
, но не S1
(поскольку его первый год, не относящийся к Северной Америке, равен 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
-1 удаляет столбец года, так как вы хотите проверить это для столбцов от S1 до S3. Чтобы сохранить этот столбец в окончательном выводе, я использую df[1]
.
Используя 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")
Могу я спросить, что здесь означают [1] и [-1]?