我有两个数据帧,行数不等。但我需要平滑数据框中的数据并将它们绘制在一起。我可以用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
包含不等数量的点的情况吗?
答案 0 :(得分: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")