作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我发现根据每个变量的最新可用观察值创建散点图时存在一些问题。我想获取每个变量和每个国家的最新 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
.
第一种情况 - 对所有列采取最后一个季度(即 HAR
和 HPG
在您的情况下):
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]
。
MPG
为
2019Q2
和
HAR
为
2019Q1
.
na.locf
来自
zoo
将最后一次观察向前推进
HPG
和
MPG
列,例如:
df2019q2 <- df[, c("HPG", "HAR") := lapply(.SD, na.locf), by = country, .SDcols = c("HPG", "HAR")][year == "2019 Q2"]
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/
我是一名优秀的程序员,十分优秀!