gpt4 book ai didi

r - 具有最新可用观测值的散点图

转载 作者:行者123 更新时间:2023-12-04 10:38:54 24 4
gpt4 key购买 nike

我发现根据每个变量的最新可用观察值创建散点图时存在一些问题。我想获取每个变量和每个国家的最新 obs,然后计算散点图。我创建了一个带有随机数的简短示例,以表明在我的基础设施中,由于 df 中缺少观察,某些国家/地区丢失了。 table 。 NL 和 FR 的图表应采用 2019q1。

library(zoo)
library(ggplot2)
library(ggrepel)
library(data.table)


# scatterplot preparation
set.seed(123)
country <- c("AT", "BE", "NL", "DE", "FR", "IT", "ES", "PT", "AT", "BE", "NL", "DE", "FR", "IT", "ES", "PT")
year <- as.yearqtr(c("2019 Q1", "2019 Q1","2019 Q1", "2019 Q1", "2019 Q1", "2019 Q1", "2019 Q1", "2019 Q1", "2019 Q2", "2019 Q2", "2019 Q2", "2019 Q2", "2019 Q2", "2019 Q2", "2019 Q2", "2019 Q2"))

HPG <- runif(16, min=0, max=5)

HAR <- runif(16, min=-1, max=3)
HAR[c(11,13)] <- NA

df <- data.frame(country, year, HPG, HAR)
df <- as.data.table(df)

df2019q2 <- df[df$year == "2019 Q2"]

ggplot(data = df2019q2, aes(x = HAR, y = HPG, label = country)) +
geom_point(colour = "blue") +
geom_label_repel(aes(label = country),
box.padding = 0.35,
point.padding = 0.5,
segment.color = 'grey50') +
theme_bw() +
guides(linetype = FALSE, size = FALSE) +
scale_y_continuous(name = "HPG", breaks = scales::pretty_breaks(n = 10), limits = c(-6, 4)) +
scale_x_continuous(name = "HAR", breaks = scales::pretty_breaks(n = 10))

最佳答案

答案取决于您是想仅用以前的信息替换缺失值还是将所有值都取到最后一个季度。以下是 data.table 的解决方案和/或 zoo .

第一种情况 - 对所有列采取最后一个季度(即 HARHPG 在您的情况下):

df2019q2 <- na.omit(df)[order(year), ][, .SD[.N], by = country]

因此,我们首先使用 na.omit 删除所有缺失值的行。 ,那么我们 order来自 year ,最后但并非最不重要的是,我们采用数据的子集( .SD ),其中每个 .N 只有最后一行( country )被采用(按照@Uwe 的建议,您也可以使用 last(.SD) 来获取最后一行并将其缩短为 na.omit(df)[order(year), last(.SD), by = country]

情节看起来像:

enter image description here

第二种情况 - 分别对每列进行最后一次观察,例如我们保留 MPG2019Q2HAR2019Q1 .

您可以使用 na.locf来自 zoo将最后一次观察向前推进 HPGMPG列,例如:
df2019q2 <- df[, c("HPG", "HAR") := lapply(.SD, na.locf), by = country, .SDcols = c("HPG", "HAR")][year == "2019 Q2"]

这将给出以下情节:

enter image description here

这当然假设您想用来自任何具有非缺失值的上一季度的信息替换缺失值。例如,如果您缺少 2019Q2 的信息和 2019Q1但在 2018Q4 中有一个非缺失值他们都会从 2018Q4 得到值.

重要 :在这两种情况下,您都需要调整您的 ggplot扩展限制的代码(否则你会再次丢失信息) - 我已经替换了 c(-6, 4)c(-6, 6) :
ggplot(data = df2019q2, aes(x = HAR, y = HPG, label = country)) + 
geom_point(colour = "blue") +
geom_label_repel(aes(label = country),
box.padding = 0.35,
point.padding = 0.5,
segment.color = 'grey50') +
theme_bw() +
guides(linetype = FALSE, size = FALSE) +
scale_y_continuous(name = "HPG", breaks = scales::pretty_breaks(n = 10), limits = c(-6, 6)) +
scale_x_continuous(name = "HAR", breaks = scales::pretty_breaks(n = 10))

关于r - 具有最新可用观测值的散点图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60027121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com