小编zx8*_*754的帖子

如何简洁地从数据框中编写包含许多变量的公式?

假设我有一个响应变量和一个包含三个协变量的数据(作为玩具示例):

y = c(1,4,6)
d = data.frame(x1 = c(4,-1,3), x2 = c(3,9,8), x3 = c(4,-4,-2))
Run Code Online (Sandbox Code Playgroud)

我想对数据进行线性回归:

fit = lm(y ~ d$x1 + d$x2 + d$y2)
Run Code Online (Sandbox Code Playgroud)

有没有办法编写公式,这样我就不必写出每个协变量?例如,像

fit = lm(y ~ d)
Run Code Online (Sandbox Code Playgroud)

(我希望数据框中的每个变量都是协变量.)我问,因为我的数据框中实际上有50个变量,所以我想避免写出来x1 + x2 + x3 + etc.

r dataframe lm glm

113
推荐指数
4
解决办法
10万
查看次数

使用ggplot2时持久无效的图形状态错误

我相信我的数据帧是可以的,我的代码还可以.实际上,我已经删除了部分数据框和大部分图形代码,以使事情尽可能基本.但是,我仍然得到:

Error in .Call.graphics(C_palette2, .Call(C_palette2, NULL)) : 
  invalid graphics state
Run Code Online (Sandbox Code Playgroud)

这有什么不对?这是数据:

 date   trt var val
1/8/2008    cc  sw5 0.2684138
1/8/2008    cc  sw15    0.2897586
1/8/2008    cc  sw5 0.2822414
2/8/2008    cc  sw5 0.2494583
2/8/2008    cc  sw5 0.2692917
2/8/2008    cc  sw15    0.2619167
2/8/2008    cc  sw5 0.204375
3/8/2008    cc  sw5 0.2430625
3/8/2008    cc  sw5 0.2654375
3/8/2008    cc  sw5 0.2509583
3/8/2008    cc  sw5 0.2055625
1/8/2008    ccw sw15    0.2212414
1/8/2008    ccw sw5 0.3613448
1/8/2008    ccw sw5 0.2607586
2/8/2008    ccw sw5 0.2087917
2/8/2008    ccw sw15    0.3390417
2/8/2008 …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

112
推荐指数
3
解决办法
11万
查看次数

在dplyr中替换"重命名"

我喜欢plyr的重命名功能rename.我最近开始使用dplyr,并想知道是否有一种简单的方法可以使用dplyr中的函数重命名变量,这对于plyr来说是否易于使用rename

r rename dplyr

110
推荐指数
4
解决办法
15万
查看次数

R>%表示%>%

我按照这个例子,server.R,文件在这里.

我打算做一个类似的过滤器,但我失去了什么%>%.

 # Apply filters
    m <- all_movies %>%
      filter(
        Reviews >= reviews,
        Oscars >= oscars,
        Year >= minyear,
        Year <= maxyear,
        BoxOffice >= minboxoffice,
        BoxOffice <= maxboxoffice
      ) %>%
      arrange(Oscars)
Run Code Online (Sandbox Code Playgroud)

r magrittr

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

R:ggplot如果在for循环中,它不起作用,尽管它在它之外工作

我正在使用一个简单的ggplot函数,它在循环外工作正常,但即使迭代值不干扰ggplot函数也不在内部.为什么会这样?

这是我的代码

x=1:7
y=1:7
df = data.frame(x=x,y=y)
ggplot(df,aes(x,y))+geom_point()
Run Code Online (Sandbox Code Playgroud)

有用 !但是如果ggplot在for循环中...

for (i in 1:5) {
   ggplot(df,aes(x,y))+geom_point()
}
Run Code Online (Sandbox Code Playgroud)

......它不再起作用了!我错过了什么?

谢谢

for-loop r ggplot2

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

左对齐两个图形边(ggplot)

我正在使用ggplot并且有两个图表,我希望彼此叠加显示.我使用grid.arrangegridExtra来堆叠它们.问题是,无论轴标签如何,我都希望图形的左边缘与右边缘对齐.(问题出现是因为一个图的标签很短而另一个图很长).

问题:
我该怎么做?我没有和grid.arrange结婚,但ggplot2是必须的.

我尝试了什么:
我尝试使用宽度和高度以及ncol和nrow来制作2 x 2网格并将视觉效果放在相对的角落然后玩宽度但我无法在对角处获得视觉效果.

require(ggplot2);require(gridExtra)
A <- ggplot(CO2, aes(x=Plant)) + geom_bar() +coord_flip() 
B <- ggplot(CO2, aes(x=Type)) + geom_bar() +coord_flip() 
grid.arrange(A, B, ncol=1)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

r ggplot2 gridextra gtable

104
推荐指数
6
解决办法
3万
查看次数

控制R中打印输出的小数位数

R中有一个选项可以控制数字显示.例如:

options(digits=10)
Run Code Online (Sandbox Code Playgroud)

应该给计算结果10位数,直到R会话结束.在R的帮助文件中,digits参数的定义如下:

digits:控制打印数值时要打印的位数.这只是一个建议.有效值为1 ... 22,默认值为7

所以,它说这只是一个建议.如果我想总是显示10位数而不是更多或更少,该怎么办?

我的第二个问题是,如果我想显示超过22位数,即更精​​确的计算如100位数,该怎么办?是否可以使用基础R,或者我是否需要额外的包/功能?

编辑:感谢jmoy的建议,我尝试了sprintf("%.100f",pi)它给了

[1] "3.1415926535897931159979634685441851615905761718750000000000000000000000000000000000000000000000000000"
Run Code Online (Sandbox Code Playgroud)

它有48位小数.这是R可以处理的最大限制吗?

precision r digits output-formatting r-faq

103
推荐指数
2
解决办法
21万
查看次数

将矩阵转换为1维数组

我有一个矩阵(32X48).

如何将矩阵转换为单维数组?

arrays r matrix

102
推荐指数
8
解决办法
20万
查看次数

使用通配符查找目录名称或类似于"like"

我使用以下命令来查找目录名称.

 find / -type d -name "ora10"
Run Code Online (Sandbox Code Playgroud)

我的问题是,我不知道确切的目录名称是什么,所以我想找到类似的目录"ora10g","ora10client"等等.

我怎么能找到这个?

unix directory

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

增加y轴上文本和标题之间的距离

y轴标题显得太靠近轴文本.

ggplot(mpg, aes(cty, hwy)) + geom_point()
Run Code Online (Sandbox Code Playgroud)

ggplot输出

我试过改变许多参数的值,theme()但似乎没有任何帮助.

layout plot r ggplot2

99
推荐指数
3
解决办法
10万
查看次数