简单的方法来填写缺失的数据
我有一个表格,结果来自一个优化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)
),每个都复制下来以适应。
或者,如果您准备按照显示的行更改源数据布局,则可以使用数据透视表,使用“select性粘贴…”值复制该值,将值放在单元格右侧的单元格中,selecty1
和y2
列和转到特殊,空白, =
,向上, Ctrl
+ Enter
。
*
或从x
标签中删除数字,然后使用多个合并范围。