gpt4 book ai didi

r - 在 R 图中快速插入缺失值

转载 作者:行者123 更新时间:2023-12-01 13:17:15 24 4
gpt4 key购买 nike

我想要一种有效的方法来绘制具有缺失值的数据帧作为 R 中的线图,根据以下基本原理;

  • 第一个和最后一个值中的 NA 被完全省略(没有线/点)
  • 实际值内的 NA 被替换为线图的中间值(不出现点)

这是我的数据框示例(已编辑)

df <- data.frame("time" = c(1,2,3,4,5),
"case1" = c(NA,2,3,4,NA),
"case2" = c(5,4,3,2,NA),
"case3" = c(4,NA,NA,NA,2))

这只是第一种情况下的工作方式

library(pracma)
df$case1.i <- with(df, interp1(time, case1, time, 'linear'))
library(ggplot2)
ggplot(df, aes(time)) + geom_point(aes(case1 = case1)) + geom_line(aes(case1 = case1.i))

我正在尝试解决一些问题,使其适用于我实际数据框中的大约 200 列。到目前为止,这段代码似乎不起作用

for (i in colnames(df)){
argument <- paste("df$case",i,".i <- with(df, interp1(time, case",i,", time, 'linear'))")
eval(parse(text=argument))
}

最佳答案

将数据读入一个新的动物园对象 z,对其应用 na.approx 以填充 NA 主体内的值数据,然后使用 ggplot2 绘图。如果需要单独的面板,请省略 facet = NULL。请注意,带有 melt = TRUEfortify.zoo 将数据转换为带有 IndexSeries 的长格式>Value 列,用于 geom_point。如果您只需要线条,请省略 geom_point(...) 部分。请参阅此答案末尾的图片。此处显示的方法相对紧凑,避免粘贴在一起然后评估代码。

library(ggplot2)
library(zoo)

z <- read.zoo(df)
autoplot(na.approx(z), facet = NULL) +
geom_point(aes(Index, Value, group = Series), fortify(z, melt = TRUE))

或者如果你想为每列绘制一个单独的图,试试这个:

pdf("civy.pdf")

for(i in 1:ncol(z)) {
p <- autoplot(na.approx(z[, i])) +
ylab(names(z)[i]) +
geom_point(aes(Index, Value), fortify(z[, i], melt = TRUE))
plot(p)
}

dev.off()

screenshot

关于r - 在 R 图中快速插入缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53630765/

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