3

我有两个行数不等的数据框。但我需要平滑两个数据框中的数据并将它们绘制在一起。我可以用lowess/loess平滑每个数据帧。但是,当我尝试将两个数据帧的线绘制在一起时,我通常会收到错误“行数不等”。我通过使用找到了解决此问题的方法spline。我想知道以下内容是否有效:

tmp1 <- spline( lowess( df1[,1], df[,2] ), n = 20 )
tmp2 <- spline( lowess( df2[,1], df2[,2] ), n = 20 )

plot( tmp1[,1], tmp1[,2], type="l" )
lines( tmp2[,1], tmp2[,2], col="red" )

lowess我想知道绘制对象的样条曲线其表示是否“统计上”有效,因为我想限制数据点的数量。这专门针对lowess不同系列包含不相等点数的情况?

4

1 回答 1

1

splines如果您(和我)记得它不会返回可以作为行和列寻址的对象,它会起作用。它返回一个包含两个元素的向量列表。所以你需要修正第二个“df”的拼写并使用“[[”:

# test data
df1 <- data.frame(x=rnorm(100), y=rpois(100, lambda=.5))
df2 <- data.frame(x=rnorm(200), y=rpois(200, lambda=.5))

tmp1 <- spline( lowess( df1[,1], df1[,2] ), n = 20 )
tmp2 <- spline( lowess( df2[,1], df2[,2] ), n = 20 )

plot( tmp1[[1]], tmp1[[2]], type="l" )
lines( tmp2[[1]], tmp2[[2]], col="red" )

这个例子可能不是一个好的开始,因为需要扩展 ylim 才能看到任何点:

 plot( tmp1[[1]], tmp1[[2]], type="l", ylim=c(0,4) )
 lines( tmp2[[1]], tmp2[[2]], col="red" )
 points(jitter(df2[[1]]), df2[[2]],  cex=0.3, col="blue")
 points(jitter( df1[[1]]), df1[[2]], cex=0.3, col="red")
于 2011-10-28T21:18:01.037 回答