小编use*_*020的帖子

在ggplot中拟合二次曲线

这是我的样本数据.我想在一个情节中绘制两个y1y2反对x1的情节.这就是我做的:

library(ISLR)
library(ggplot2)

y1<-scale(Auto$horsepower,scale = T,center=T)
y2<-scale(Auto$weight,scale = T,center=T)
x1<-Auto$mpg
df<-data.frame(y1,y2,x1)

p<-ggplot(df,aes(x=x1)) + 
   geom_point(aes(y = y1), shape = 16) +
   geom_point(aes(y = y2), shape = 2) 
Run Code Online (Sandbox Code Playgroud)

我想为y1和y2插入一条二次线对x.我这样做了:

p + stat_smooth(method = "lm", formula = y ~ x + I(x^2), size = 1)
Run Code Online (Sandbox Code Playgroud)

它引发了一个错误:

Warning message:
Computation failed in `stat_smooth()`:
variable lengths differ (found for 'x')  
Run Code Online (Sandbox Code Playgroud)

除此之外,该stat_smooth命令只能将一个二次线,而我需要两个二次线都y1y2.

我是如何在R中实现这一目标的?

谢谢

r quadratic ggplot2

13
推荐指数
1
解决办法
1万
查看次数

R对多个条件使用if else语句

样本数据:

x<-runif(100, min=0, max=1)
y<-runif(100, min=0, max=1)
dif<-x-y
dat<-data.frame(x,dif)
Run Code Online (Sandbox Code Playgroud)

我想要做的是在数据框中创建另一列dat名为suit.如果x小于0.15并且dif小于0,则suit应该具有值3.如果x小于0.15并且dif大于0,则suit应该具有值2并且如果dif大于0,则suit具有值1.

这是我准备的代码.

if(dat$x<0.15 & dat$dif<0){
   dat$suit<-3
} else {
if(dat$x>=0.15 & dat$dif<0){
   dat$suit<-2  
} else {
  dat$suit<-1  
 }
}
Run Code Online (Sandbox Code Playgroud)

它给出了所有的值为dat$suit1.我不确定我在这里做错了什么.

谢谢您的帮助.

if-statement r

7
推荐指数
2
解决办法
4万
查看次数

在 R 中以不同名称保存循环中生成的栅格名称

我正在尝试创建 5 个光栅文件并使用单独的名称写入每个光栅文件。到目前为止,我已经成功实现了这一点:

c=5
for (i in 1:c){
z<-RFsimulate(x=x,y=y,grid=TRUE,model = model,maxGB=4.0)
a<-raster(z)
projection(a) <- "+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0"
writeRaster(raster(a),filename="raster[i].tif")
} 
Run Code Online (Sandbox Code Playgroud)

但我在工作目录中只找到一个光栅文件(光栅 1)。我想我会有五个光栅文件名称 raster1、raster2.....raster5。谁能帮我看看我的代码有什么问题吗?

谢谢

loops r raster

3
推荐指数
1
解决办法
2011
查看次数

并排绘制单个因子的多个点

这是我制作的样本数据和情节.

library(ggplot2)  
value<-c(-1.01, -0.02,1.61,0.60, -0.98,0.19,4.68,-0.86,-3.52,-1.85,-2.08,-0.48,0.10,-1.05,-0.003) 
sd<-c(1.40,0.48,0.83,0.41,0.80,0.36,1.52,0.30,1.19,0.44,1.33,0.45,0.64,0.35,1.20)
variable<-rep(c("A","B","C","D","E"),times=3)
clss<-rep(c("NC","RC","LC"),each=5)
df<-data.frame(value,variable,clss)

ggplot(df,aes(x=variable,y = value))+
geom_point()+
geom_hline(yintercept = 0, size = I(0.2), color = I("red")) +
geom_errorbar(aes(ymin = value - 1.96 * sd, ymax = value + 1.96 * sd),width = .1)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

由于每个A,B,C,D和E有三个点,我想并排绘制三个点而不是单个列.这也意味着我需要在标签A和B,B和C之间有一些间距,以便在图上分别看到A,B,C,D和E的三个点.

我试图使用抖动

在此输入图像描述

但它只会改变我的观点而不是我的错误条.另外我需要将A的位置作为三点的中间位置.同样适用于B,C,D和E.

r point ggplot2

3
推荐指数
1
解决办法
1605
查看次数

R选择数据子集

我有一个包含三列的数据集.

## generate sample data
set.seed(1)
x<-sample(1:3,50,replace = T )
y<-sample(1:3,50,replace = T )
z<-sample(1:3,50,replace = T )
data<-as.data.frame(cbind(x,y,z))
Run Code Online (Sandbox Code Playgroud)

我想要做的是:

  1. 选择所有三列都有1的行

  2. 选择那些只有两列有1的行(可以是任何列)

  3. 只选择那些只有列有1的行(可以是任何列)

基本上我想要任何两列(第二种情况)满足条件而不是任何特定列.

我知道使用行选择

subset<-data[c(data$x==1,data$y==1,data$z==1),]
Run Code Online (Sandbox Code Playgroud)

但是这只根据特定列的条件选择那些行,而我希望三/两列中的任何一列满足我的标准

谢谢

r subset

2
推荐指数
1
解决办法
719
查看次数

标签 统计

r ×5

ggplot2 ×2

if-statement ×1

loops ×1

point ×1

quadratic ×1

raster ×1

subset ×1