R 使用来自其他数据帧的数据对数据帧进行子集

R 使用来自其他数据帧的数据对数据帧进行子集,r,ggplot2,dplyr,shiny,R,Ggplot2,Dplyr,Shiny,我有一个散点图,我想能够过滤散点图的数据 在这张图中,您可以看到四个图。1条中绿色曲线,2条上黑色曲线,3条下黑色曲线,4条蓝色散点图 我以数据框的形式提供了所有这些: 蓝色散点图: df <- mtcars geom_point(df, aes(x,y), color = 'blue') 上曲线: geom_smooth(formula=y+1~x, method='loess', color='gray20', se=FALSE, size=0.5) 下曲线 geom_smooth

我有一个散点图,我想能够过滤散点图的数据

在这张图中,您可以看到四个图。1条中绿色曲线,2条上黑色曲线,3条下黑色曲线,4条蓝色散点图

我以数据框的形式提供了所有这些:

蓝色散点图:

df <- mtcars
geom_point(df, aes(x,y), color = 'blue')
上曲线:

geom_smooth(formula=y+1~x, method='loess', color='gray20', se=FALSE, size=0.5)
下曲线

geom_smooth(formula=y-1~x, method='loess', color='gray20', se=FALSE, size=0.5)
我想用黑色曲线过滤蓝色数据点,这样只有剩下的蓝色数据点应该在这两条黑色线之间,并且应该移除异常值

我尝试使用which、filter、Subset函数。但是,它不起作用,它没有呈现我想要的输出


最后,我想要这两条黑线之间的分散数据。

虽然我们没有您的特定数据集,但这里有一种基于mtcars数据集的方法。首先,让我们画一个与OP分享的内容类似的图:

df <- mtcars

ggplot(df, aes(disp, mpg)) + theme_bw() +
  geom_point(color='gray60') +
  geom_smooth(formula=y~x, method='loess', color='green3', se=FALSE, size=0.5) +
  geom_smooth(formula=y+1~x, method='loess', color='gray20', se=FALSE, size=0.5) +
  geom_smooth(formula=y-1~x, method='loess', color='gray20', se=FALSE, size=0.5)
现在,我们可以创建一个df$region列,描述每个点在数据集中的位置:

df$region <- ifelse(df$mpg <= df$upper & df$mpg >= df$lower, 'inside','outside')
要完全过滤掉这些外部点,可以使用subset并将其应用于geom_point数据字段:

ggplot(df, aes(disp, mpg)) + theme_bw() +
  geom_point(data=subset(df, region=='inside'), color='red') +
  geom_smooth(formula=y~x, method='loess', color='green3', se=FALSE, size=0.5) +
  geom_smooth(formula=y+1~x, method='loess', color='gray20', se=FALSE, size=0.5) +
  geom_smooth(formula=y-1~x, method='loess', color='gray20', se=FALSE, size=0.5)

现在,在应用于您自己的数据时,您可以使用类似的方法。无论您如何定义绘制上下直线,只需将该公式应用于数据集中的x值即可创建上下区域。然后将实际y值与预测的上下值进行比较。

能否添加用于生成绘图的数据帧和R代码?另外,我们还不清楚如何提供解决方案。我是新手,你能告诉我,如何在我的问题中添加数据帧吗。我有CSV文件中的所有4个数据帧。仅供参考:数据框相当大。在这种情况下,您能定义3条曲线吗?有没有一个具体的方程式?没有,没有具体的方程式。那么它们是如何生成的?谢谢你这么详细的回答,我会试试你的方法。这肯定很有帮助。我可以用同样的方法来处理“lm”而不是“黄土”吗?没有理由你不能这样做。只需改变该线地块使用geom_smooth的方法,显然使用lm代替黄土。
df$region <- ifelse(df$mpg <= df$upper & df$mpg >= df$lower, 'inside','outside')
ggplot(df, aes(disp, mpg)) + theme_bw() +
  geom_point(aes(color=region)) +
  geom_smooth(formula=y~x, method='loess', color='green3', se=FALSE, size=0.5) +
  geom_smooth(formula=y+1~x, method='loess', color='gray20', se=FALSE, size=0.5) +
  geom_smooth(formula=y-1~x, method='loess', color='gray20', se=FALSE, size=0.5) +
  scale_color_manual(values=c('inside'='red', 'outside'='gray80'))
ggplot(df, aes(disp, mpg)) + theme_bw() +
  geom_point(data=subset(df, region=='inside'), color='red') +
  geom_smooth(formula=y~x, method='loess', color='green3', se=FALSE, size=0.5) +
  geom_smooth(formula=y+1~x, method='loess', color='gray20', se=FALSE, size=0.5) +
  geom_smooth(formula=y-1~x, method='loess', color='gray20', se=FALSE, size=0.5)