我有一张包含优化算法结果的表格。我有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次运行时,y为4时为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
答案 0 :(得分:2)
例如,在R中,您可以分两步完成。首先合并你的2次运行,然后填充缺失的值,最后不缺少。我正在动物园包中使用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
答案 1 :(得分:1)
使用Excel,您可以使用VLOOKUP,如果您首先列出所有唯一排序x
值的列(一列似乎足够?)和y
类似的列:
=VLOOKUP($F2,A:B,2)
(=VLOOKUP($F2,C:D,2)
y2
)每个都被复制以适应。
或者,如果您准备沿着*
显示的行更改源数据布局,那么您可以使用数据透视表,使用选择性粘贴...,值复制,将某些内容放在单元格的右侧Values
,选择y1
和y2
列,转到特殊,空白,=
,向上,Ctrl
+ Enter
。
*
或删除x
标签中的数字,并使用多个合并范围。