我有一个大型数据集,包含20个国家的40个变量,其中一些列在第一年(和最后一年)有NAs。我想提取在给定国家的列中没有NA的第一年和最后一年。
下面的代码成功地给出了英国GDP列中没有NA的第一年和最后一年。
min(sort(table$year[table$Country=="UK"][which(!is.na(table$GDP))]))
[1] "1959"
max(sort(table$year[table$Country=="UK"][which(!is.na(table$GDP))]))
[1] "2020"
然而,这种手工方法效率不高。因此,我想知道这是否可以为所有国家和所有变量使用例如tidyverse?我想实现一个输出,显示最小和最大的年份没有NA的每个国家和每个变量:
Country Variable min max
1 UK GDP 1959 2020
2 FR GDP 1980 2020
3 IT GDP 1980 2020
4 UK Inflation 1990 2022
5 FR Inflation 2000 2022
6 IT Inflation 2000 2022
谢谢!
您可以更长时间地透视数据,删除值为NA
的行,并取最小,最大年份:
library(dplyr)
library(tidyr)
pivot_longer(df, cols = -c(Country,year),names_to = "Variable") %>%
filter(!is.na(value)) %>%
group_by(Country, Variable) %>%
summarize(MinYear = min(year), MaxYear=max(year))
注意,这假设除了Country
和year
列,所有其他列都是感兴趣的目标变量(即cols = -c(Country, year)
)。如果不是这种情况,还有其他选项,例如:
- 使用如下
cols = GDP:Inflation
- 将目标颜色放置在矢量
target_vars = c("GDP", "Inflation")
中,并使用cols = all_of(target_vars)