小编don*_*zao的帖子

因子水平和因子标签之间的混淆

R中因子的级别和标签之间似乎存在差异.到目前为止,我一直认为级别是因子级别的"真实"名称,标签是用于输出的名称(例如表格和图表) .显然,情况并非如此,如下例所示:

df <- data.frame(v=c(1,2,3),f=c('a','b','c'))
str(df)
'data.frame':   3 obs. of  2 variables:
 $ v: num  1 2 3
 $ f: Factor w/ 3 levels "a","b","c": 1 2 3

df$f <- factor(df$f, levels=c('a','b','c'),
  labels=c('Treatment A: XYZ','Treatment B: YZX','Treatment C: ZYX'))
levels(df$f)
[1] "Treatment A: XYZ" "Treatment B: YZX" "Treatment C: ZYX"
Run Code Online (Sandbox Code Playgroud)

我认为在脚本编写时仍可以以某种方式访问​​级别('a','b','c'),但这不起作用:

> df$f=='a'
[1] FALSE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)

但这样做:

> df$f=='Treatment A: XYZ' 
[1]  TRUE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)

所以,我的问题包括两部分:

  • 关卡和标签有什么区别?

  • 脚本和输出的因子级别是否可以有不同的名称?

背景:对于较长的脚本,使用较短因子级别的脚本似乎要容易得多.但是,对于报告和图表,这个较短的因子水平可能不够,应该用精简者名称替换.

r r-faq r-factor

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

复制和修改默认主题

我想创建一个ggplot基于的新主题theme_bw().

我想以下步骤是必要的(在伪代码中):

  1. 制作theme_bw()的副本: theme_new() <- theme_bw()
  2. 修改副本: theme_update(axis.title.x = theme_text(family = base_family, size = base_size, vjust = 0.5))

任何关于如何实现这一点的建议将非常感谢!


编辑: @Andrie,我根据自己的需要修改了你的答案:

theme_new <- theme_set(theme_bw())
theme_new <- theme_update(axis.title.x = theme_text(family = base_family, size = base_size, vjust = 0.5))
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

ggplot(mtcars, aes(factor(cyl))) + geom_bar()
Run Code Online (Sandbox Code Playgroud)

匹配错误(gparname,names(gpars)):找不到对象'base_size'


编辑: 2017年10月31日,由@Andrie提供的答案工作得很好. R版本3.4.1,ggplot2_2.2.1

plot themes r ggplot2

30
推荐指数
4
解决办法
8268
查看次数

通过功能更新数据帧不起作用

我使用R遇到了一个小问题......

在以下数据框中

test <- data.frame(v1=c(rep(1,3),rep(2,3)),v2=0) 
Run Code Online (Sandbox Code Playgroud)

我想在v1为1的行中更改v2的值.

test[test$v1==1,"v2"] <- 10
Run Code Online (Sandbox Code Playgroud)

工作得很好.

test
  v1 v2
1  1 10
2  1 10
3  1 10
4  2  0
5  2  0
6  2  0
Run Code Online (Sandbox Code Playgroud)

但是,我需要在函数中执行此操作.

test <- data.frame(v1=c(rep(1,3),rep(2,3)),v2=0)

test.fun <- function (x) {
    test[test$v1==x,"v2"] <- 10
    print(test)
}
Run Code Online (Sandbox Code Playgroud)

调用该函数似乎有效.

test.fun(1)
  v1 v2
1  1 10
2  1 10
3  1 10
4  2  0
5  2  0
6  2  0
Run Code Online (Sandbox Code Playgroud)

但是,当我现在看看测试时:

test
  v1 v2
1  1  0
2  1  0
3  1  0 …
Run Code Online (Sandbox Code Playgroud)

r function dataframe

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

仅保留每个因子级别的最小值

我遇到了一些困扰我的问题...希望这里的任何人都可以帮助我.

我得到了以下数据框

f <- c('a','a','b','b','b','c','d','d','d','d')
v1 <- c(1.3,10,2,10,10,1.1,10,3.1,10,10)
v2 <- c(1:10)
df <- data.frame(f,v1,v2)
Run Code Online (Sandbox Code Playgroud)

f是一个因素; v1和v2是值.对于f的每个级别,我只想要保留一行:在此因子级别中具有最低值v1的行.

f   v1  v2
a   1.3 1
b   2   3
c   1.1 6
d   3.1 8
Run Code Online (Sandbox Code Playgroud)

我用聚合,ddply,by,tapply尝试了各种各样的东西......但似乎没有任何效果.对于任何建议,我将非常感激.

r dataframe

25
推荐指数
5
解决办法
8031
查看次数

刻面ggplot的不同图例和填充颜色?

很抱歉没有包含我的问题的任何示例数据.我找不到轻松生成示例形状文件的方法.希望有经验的用户ggplot可以从下面的描述中看到我想做的事情.

我有:

  • 一个data.frameX与约样地信息(plotid,var1,var2,var3,var4,...)

  • Y具有样本图的空间信息的多边形shapefile

导入shapefile Y(with maptools)和fortifying as data.frame Z(ggplot2)可以正常工作.melt荷兰国际集团XX_melted作品同样精致.merge-ing ZX_meltedmapdf作品为好.

这意味着,现在我们有一个data.frame长形式的空间信息和var1,var2,var3,...

现在我想绘制这样的数据框:

pl1 <- ggplot(mapdf,aes(long,lat),group=group)
pl1 <- pl1 + geom_polygon(aes(group=group,fill=value),colour="black")
pl1 <- pl1 + facet_grid(variable ~ .)
pl1 <- pl1 + coord_equal(ratio = 1)
pl1
Run Code Online (Sandbox Code Playgroud)

结果是一个很好的情节,每个变量有一个面板.面板的地图是相同的,但填充颜色随变量的值而变化.到目前为止,一切都像魅力......有一个问题: …

r spatial shapefile ggplot2

16
推荐指数
2
解决办法
6584
查看次数

如何将复杂的方程式放入R公式中?

我们将树的直径作为预测因子,树高作为因变量.对于这种数据存在许多不同的方程式,我们尝试对其中的一些进行建模并比较结果.

但是,我们无法弄清楚如何正确地将一个方程式放入相应的R formula格式中.

trees数据组中R,可以使用,例如,

data(trees)
df <- trees
df$h <- df$Height * 0.3048   #transform to metric system
df$dbh <- (trees$Girth * 0.3048) / pi   #transform tree girth to diameter
Run Code Online (Sandbox Code Playgroud)

首先,似乎运作良好的等式的例子:

在此输入图像描述

form1 <- h ~ I(dbh ^ -1) + I( dbh ^ 2)  
m1 <- lm(form1, data = df)
m1

Call:
lm(formula = form1, data = df)

Coefficients:
(Intercept)    I(dbh^-1)     I(dbh^2)  
27.1147      -5.0553       0.1124  
Run Code Online (Sandbox Code Playgroud)

系数a,bc估计,这是我们感兴趣的.

现在有问题的等式:

在此输入图像描述

试着像这样适合它:

form2 <- …
Run Code Online (Sandbox Code Playgroud)

statistics regression r data-modeling linear-regression

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

ggplot和pgfSweave的问题

我不久前开始使用Sweave.但是,像大多数人一样,我很快遇到一个主要问题:速度.扫描大型文档需要很长时间才能运行,这使得高效工作非常具有挑战性.使用cacheSweave可以加速数据处理.但是,情节 - 特别是ggplot;) - 渲染时间仍然太长.这是我想要使用pgfSweave的方式.

经过许多小时,我终于成功地用Eclipse/StatET/Texlipse建立了一个工作系统.然后,我想将现有的报告转换为与pgfSweave一起使用,并且有一个惊喜:我的大多数ggplots似乎都不再起作用了.以下示例在控制台和Sweave中完美运行:

pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)
Run Code Online (Sandbox Code Playgroud)

然而,使用pgfSweave运行它,我收到此错误:

Error in if (width > 0) { : missing value where TRUE/FALSE needed
In addition: Warning message:
In if (width > 0) { :
  the condition has length > 1 and only the first element will be used
Error in driver$runcode(drobj, chunk, chunkopts) : 
  Error in if (width > 0) { : missing value where TRUE/FALSE needed
Run Code Online (Sandbox Code Playgroud)

当我从geom_point中删除aes(...)时,该图与pgfSweave完美配合.

pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl …
Run Code Online (Sandbox Code Playgroud)

latex r tikz ggplot2 sweave

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