【发布时间】:2019-01-22 01:42:54
【问题描述】:
我正在为我的数据崩溃而苦苦挣扎。
基本上,我的数据由多个指标和每年的多个观察值组成。我想将其转换为针对每个国家/地区的每个指标的一个观察结果。
我有一个排名指标,它指定必须选择观察的顺序。
基本上必须选择具有第一等级的观察(因此 1 而不是 2),只要该等级的值不是 NA。
另一个问题:我的数据集中的年份随时间而变化,因此有没有办法使代码动态化,因为它将代码应用于从 1990 年到 2025 年存在的所有列名?
df <- data.frame(country.code = c(1,1,1,1,1,1,1,1,1,1,1,1),
id = as.factor(c("GDP", "GDP", "GDP", "GDP", "CA", "CA", "CA", "GR", "GR", "GR", "GR", "GR")),
`1999` = c(NA,NA,NA, 1000,NA,NA, 100,NA,NA, NA,NA,22),
`2000` = c(NA,NA,1, 2,NA,1, 2,NA,1000, 12,13,2),
`2001` = c(3,100,1, 3,100,20, 1,1,44, 65,NA,NA),
rank = c(1, 2 , 3 , 4 , 1, 2, 3, 1, 3, 2, 4, 5))
结果应该是以下数据集:
result <- data.frame(country.code = c(1, 1, 1),
id = as.factor(c("GDP", "CA", "GR")),
`1999`= c(1000, 100, 22),
`2000`= c(1, 1, 12),
`2001`= c(3, 100, 1))
我尝试了以下解决方案(但考虑到数据中的 NA,这不起作用,我必须指定每一列:
test <- df %>% group_by(Country.Code, Indicator.Code) %>%
summarise(test1999 = `1999`[which.min(rank))
我不明白如何解释 R 以省略 1999 列中为 NA 的情况。
【问题讨论】: