r语言 - 基于其他列中 NA 的列的最小值(按组)



我有一个大型数据集,包含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))

注意,这假设除了Countryyear列,所有其他列都是感兴趣的目标变量(即cols = -c(Country, year))。如果不是这种情况,还有其他选项,例如:

  • 使用如下cols = GDP:Inflation
  • 将目标颜色放置在矢量target_vars = c("GDP", "Inflation")中,并使用cols = all_of(target_vars)

最新更新