简单的方法来填写缺失的数据

我有一个表格,结果来自一个优化algorithm。 我有100次运行。 X表示时间,只有存储改进时才存储。 所以我已经错过了X – ES。

x1; y1 ; x2 ; y2 1 ; 100 ; 1 ; 150 4 ; 90 ; 2 ; 85 7 ; 85 ; 10 ; 60 10; 80 ; 

这只是一个csv。 我正在寻找一种方法来轻松地处理这个。 因为想要计算每个x值的平均值。 所以x = 4时的平均值需要考虑到2的运行,4的y是85。

任何使用excel的简单方法。 或者在Java或R中读取它? (我会用R的ggplot来绘制日历)。

所以预期的输出将如下所示:

 x1; y1 ; x2 ; y2 1 ; 100 ; 1 ; 150 2 ; 100 ; 2 ; 85 4 ; 90 ; 4 ; 85 7 ; 85 ; 7 ; 85 10; 80 ;10 ; 60 

–update

下面我已经应用了agstudy的答案。 这是我的脚本:

 library(ggplot2) library(zoo) data1 = read.table("rundata1", sep= " ", col.names=c("tm1","score1","current1")) data2 = read.table("rundata1", sep= " ", col.names=c("tm2","score2","current2")) newdata<- merge(data1[,1:2],data2[,1:2],by=1,all=T) newdata <- newdata[!is.na(newdata$tm1),] newdata$score1 <- zoo::na.locf(newdata$score1) newdata$score2 <- zoo::na.locf(newdata$score2) 

现在几乎工作。 只有一个错误:

 newdata$score2 <- zoo::na.locf(newdata$score2) Error in `$<-.data.frame`(`*tmp*`, "score2", value = c(40152.6, 40152.6, : replacement has 11767 rows, data has 11768 

例如,在R中,您可以分两步执行此操作。 首先你合并你的2次运行,然后填写缺less的值,最后一个不丢失。 我正在使用动物园包的na.locf

 xx <- read.table(text='x1; y1 ; x2 ; y2 1 ; 100 ; 1 ; 150 4 ; 90 ; 2 ; 85 7 ; 85 ; 10 ; 60 10; 80 ;',sep=';',fill=TRUE,header=TRUE) dm <- merge(xx[,1:2],xx[,3:4],by=1,all=T) dm <- dm[!is.na(dm$x1),] dm$y1 <- zoo::na.locf(dm$y1) dm$y2 <- zoo::na.locf(dm$y2) dm x1 y1 y2 1 1 100 150 2 2 100 85 3 4 90 85 4 7 85 85 5 10 80 60 

使用Excel,你可能会使用VLOOKUP,如果首先你有一列所有独特的sortingx值升序(一列看起来足够?),并为y类似:

 =VLOOKUP($F2,A:B,2) 

=VLOOKUP($F2,C:D,2) y2 =VLOOKUP($F2,C:D,2) ),每个都复制下来以适应。

SO21912834第一个例子

或者,如果您准备按照显示的行更改源数据布局,则可以使用数据透视表,使用“select性粘贴…”值复制该值,将值放在单元格右侧的单元格中,selecty1y2列和转到特殊,空白, = ,向上, Ctrl + Enter

*或从x标签中删除数字,然后使用多个合并范围。

SO21912834第二个例子