我最近从OSX Mountain Lion"升级"到Yosemite,从R 3.1.3升级到3.2.升级之后,当我打开R或RStudio时,我收到一条弹出消息,说我需要安装Java 6.此外,加载rJava
或依赖于rJava的任何软件包(例如xlsx
)导致RStudio崩溃(R也崩溃了当我通过R.app
直接打开尝试这个).
尝试在Stack Overflow和其他地方找到一些修复程序后(下面有更多详细信息),我正处于加载rJava
或任何依赖的程序包rJava
不再导致R崩溃的程度,但会导致以下错误:
library(rJava)
Error : .onLoad failed in loadNamespace() for 'rJava', details:
call: dyn.load(file, DLLpath = DLLpath, ...)
error: unable to load shared object '/Library/Frameworks/R.framework/Versions/3.2/Resources/library/rJava/libs/rJava.so':
dlopen(/Library/Frameworks/R.framework/Versions/3.2/Resources/library/rJava/libs/rJava.so, 6): Library not loaded: @rpath/libjvm.dylib
Referenced from: /Library/Frameworks/R.framework/Versions/3.2/Resources/library/rJava/libs/rJava.so
Reason: image not found
Error: package or namespace load failed for ‘rJava’
Run Code Online (Sandbox Code Playgroud)
但是,如果我从命令行调用R然后加载rJava
或依赖的任何包rJava
,它似乎工作(或至少我没有得到任何错误消息).
我已经尝试了一些不同的尝试修复,其中一些已经修改了几次,并且不能完全记住我按照什么顺序做了什么(没有意识到这将是如此的泥潭并且并没有真正保持跟踪) ,但这是它的要点:
添加了以下内容.bash_profile
(根据此SO答案):
export JAVA_HOME ="/ usr/libexec/java_home -v 1.8"
export …
当使用summarise
具有plyr
的ddply
功能,空类别默认情况下删除.您可以通过添加更改此行为.drop = FALSE
.然而,当使用这不起作用summarise
用dplyr
.还有另一种方法可以在结果中保留空类别吗?
这是假数据的一个例子.
library(dplyr)
df = data.frame(a=rep(1:3,4), b=rep(1:2,6))
# Now add an extra level to df$b that has no corresponding value in df$a
df$b = factor(df$b, levels=1:3)
# Summarise with plyr, keeping categories with a count of zero
plyr::ddply(df, "b", summarise, count_a=length(a), .drop=FALSE)
b count_a
1 1 6
2 2 6
3 3 0
# Now try it with dplyr
df %.%
group_by(b) %.%
summarise(count_a=length(a), .drop=FALSE)
b …
Run Code Online (Sandbox Code Playgroud) 我试图在用knitr/rmarkdown制作的PDF中交叉引用数字和表格.关于SO和tex.stackexchange(这里和这里,例如)有一些问题,建议内联的方法是添加\ref{fig:my_fig}
,my_fig
块标签在哪里.但是,当我在我的rmarkdown
文档中尝试时,我会得到??
图号应该在哪里.我想了解如何使交叉引用正常工作.
可重复的例子如下.有两个文件:rmarkdown
文件加上header.tex
我包含的文件,以防它影响答案(尽管我是否包含header.tex
文件也有同样的问题).
在该rmarkdown
文件中有三个交叉引用示例.示例1是交叉引用失败的图(??
显示而不是图号).还有第二个注释掉的尝试(基于这个SO答案),我尝试latex
在块之前和之后用标记设置图形环境,标签和标题,但是pandoc
当我尝试编织文档时这会导致错误.错误是:
Run Code Online (Sandbox Code Playgroud)! Missing $ inserted. <inserted text> $ l.108 , '%B %e, %Y')`"
output:
pdf_document:
fig_caption: yes
includes:
in_header: header.tex
keep_tex: yes
fontsize: 11pt …
Run Code Online (Sandbox Code Playgroud) 在向绘图添加注释文本时,我注意到geom_text()
产生了难看的锯齿状文本,同时annotate()
产生了流畅,漂亮的文本.有谁知道为什么会发生这种情况,如果有办法解决它?我知道我可以在annotate()
这里使用,但有些情况可能geom_text()
会更好,我想找到一个解决办法.此外,geom_text()
不能打算给出看起来不好的文字,所以要么我做错了,要么我遇到了某种微妙的副作用.
这里有一些假数据和生成图表的代码,以及显示结果的图像.
library(ggplot2)
age = structure(list(age = c(41L, 40L, 43L, 44L, 40L, 42L, 44L, 45L,
44L, 41L, 43L, 40L, 43L, 43L, 40L, 42L, 43L, 44L, 43L, 41L)),
.Names = "age", row.names = c(NA, -20L), class = "data.frame")
ggplot(age, aes(age)) +
geom_histogram() +
scale_x_continuous(breaks=seq(40,45,1)) +
stat_bin(binwidth=1, color="black", fill="blue") +
geom_text(aes(41, 5.2,
label=paste("Average = ", round(mean(age),1))), size=12) +
annotate("text", x=41, y=4.5,
label=paste("Average = ", round(mean(age$age),1)), size=12)
Run Code Online (Sandbox Code Playgroud)
如果日期向量具有两位数年份,则将mdy()
年份在00到68之间变为21世纪年份,将年份从69到99年变为20世纪年份.例如:
library(lubridate)
mdy(c("1/2/54","1/2/68","1/2/69","1/2/99","1/2/04"))
Run Code Online (Sandbox Code Playgroud)
给出以下输出:
Multiple format matches with 5 successes: %m/%d/%y, %m/%d/%Y.
Using date format %m/%d/%y.
[1] "2054-01-02 UTC" "2068-01-02 UTC" "1969-01-02 UTC" "1999-01-02 UTC" "2004-01-02 UTC"
Run Code Online (Sandbox Code Playgroud)
我可以通过从不正确的日期减去100到2054和2068到1954年和1968年来解决这个问题.但是有一种更优雅且不易出错的解析两位数日期的方法,以便它们在正确处理解析过程本身?
更新:在@JoshuaUlrich指出我之后,strptime
我发现了这个问题,它解决了类似于我的问题,但是使用了基础R.
似乎R中日期处理的一个很好的补充是在日期解析函数中处理两位数日期的世纪选择截止值的某种方式.
[ 更新:虽然我已接受答案,但如果您有其他可视化想法(无论是R还是其他语言/程序),请添加其他答案.关于分类数据分析的文本似乎没有太多关于可视化纵向数据的内容,而关于纵向数据分析的文本似乎没有太多关于在类别成员资格中随时间变化内部主体变化的可视化.对这个问题有更多的答案将使它成为一个在标准参考文献中没有得到太多报道的问题的更好资源.
一位同事刚给我一个纵向分类数据集,我试图弄清楚如何捕捉可视化中的纵向方面.我在这里发帖,因为我想在R中这样做,但是请告诉我是否有必要交叉发布到Cross-Validated,因为通常不鼓励交叉发布.
快速背景:数据跟踪学生通过学术咨询计划从学期到学期的学术地位.数据为长格式,有五个变量:"id","同类","术语","站立"和"termGPA".前两个确定学生和他们在咨询计划中的期限.最后三个是学生的学术地位和GPA记录的条款.我在下面粘贴了一些示例数据dput
.
我创建了一个马赛克图(见下文),通过群组,站立和术语对学生进行分组.这表明在每个学期中,每个学术类别中的学生比例是多少.但这并没有捕捉到纵向方面 - 随着时间的推移追踪个别学生的事实.我想跟踪具有特定学术地位的学生群体随着时间的推移而走的路.
例如:在2009年秋季("F09")中具有"AP"(学术试用期)的学生中,未来的术语中仍然是AP的哪一部分,以及进入其他类别的部分(例如,GS,"良好信誉")?自进入咨询计划以来,类别之间的移动与时间之间是否存在差异?
我无法弄清楚如何在R图形中捕捉这个纵向方面.该vcd
软件包具有可视化分类数据的功能,但似乎不能解决纵向分类数据.是否存在可视化纵向分类数据的"标准"方法?R是否有为此设计的包装?长格式适合这种类型的数据,还是宽屏格式会更好?
我希望有解决这一特定问题的建议以及文章,书籍等的建议,以便更多地了解纵向分类数据的可视化.
这是我用来制作马赛克图的代码.该代码使用下面列出的数据dput
.
library(RColorBrewer)
# create a table object for plotting
df1.tab = table(df1$cohort, df1$term, df1$standing,
dnn=c("Cohort\nAcademic Standing", "Term", "Standing"))
# create a mosaic plot
plot(df1.tab, las=1, dir=c("h","v","h"),
col=brewer.pal(8,"Dark2"),
main="Fall 2009 and Fall 2010 Cohorts")
Run Code Online (Sandbox Code Playgroud)
这是马赛克图(侧面问题:是否有任何方法可以使F10群组的列直接位于F09群组的下方,并且具有与F09群组相同的宽度,即使F10群组中的某些术语没有数据?) :
这是用于创建表格和图表的数据:
df1 =
structure(list(id = c(101L, 102L, 103L, 104L, 105L, 106L, 107L,
108L, 109L, 110L, 111L, 112L, 113L, 114L, 115L, 116L, 117L, 118L,
119L, 120L, 121L, …
Run Code Online (Sandbox Code Playgroud) 由于某种原因,我的R降价(rmd)中的链接没有格式化为蓝色.将下面的简单rmd编织为pdf会使文本颜色变黑.只有当它悬停在它上面时才会意识到它实际上是一个链接.将它编织成html将使链接变为蓝色.当然我可以使用乳胶包装但我不知道为什么会这样?
sessionInfo()R版本3.3.0(2016-05-03)平台:x86_64-w64-mingw32/x64(64位)运行于:Windows 7 x64(build 7601)Service Pack 1通过命名空间加载(并未附加) ):knitr_1.15
RStudio 1.0.44
---
title: "R Notebook"
output:
pdf_document: default
html_notebook: default
---
```{r, echo=F}
# tex / pandoc options for pdf creation
x <- Sys.getenv("PATH")
y <- paste(x, "E:\\miktex\\miktex\\bin", sep=";")
Sys.setenv(PATH = y)
```
[link](www.rstudio.com)
Run Code Online (Sandbox Code Playgroud)
我想创建一个新变量,它等于其他两个变量之一的值,以其他变量的值为条件.这是一个假数据的玩具示例.
数据框的每一行代表一名学生.每个学生可以学习最多两个科目(subj1
和subj2
),并且可以在每个科目中攻读学位("BA")或未成年人("MN").我的真实数据包括数千名学生,几种类型的学位,约50个科目,学生可以有多达五个专业/未成年人.
ID subj1 degree1 subj2 degree2
1 1 BUS BA <NA> <NA>
2 2 SCI BA ENG BA
3 3 BUS MN ENG BA
4 4 SCI MN BUS BA
5 5 ENG BA BUS MN
6 6 SCI MN <NA> <NA>
7 7 ENG MN SCI BA
8 8 BUS BA ENG MN
...
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个第六个变量,df$major
它等于subj1
if 的值subj1
是学生的主要专业,或者subj2
if 的值subj2
是主要专业.主要专业是第一个学位等于"BA"的学科.我尝试了以下代码:
df$major[df$degree1 == "BA"] = df$subj1
df$major[df$degree1 != …
Run Code Online (Sandbox Code Playgroud) 我想用直方图中的每个条形标记该区域中的计数数量或该区域中总计数的百分比.我敢肯定必须有办法做到这一点,但我找不到它.这个页面有几张SAS直方图的照片,基本上我正在尝试做的事情(但该网站似乎没有R版本):http://www.ats.ucla.edu/stat/sas/常见问题/ histogram_anno.htm
如果可能的话,根据需要,可以灵活地将标签放在条形图的上方或某处.
我正在尝试使用基本R绘图工具,但我对ggplot2和格子中的方法感兴趣.
我想创建一个条形图,其中条形按高度排序,而不是按类别按字母顺序排列.当我加载的唯一包是ggplot2时,这工作正常.但是,当我加载一些包并运行创建,排序和绘制数据框的相同代码时,条形图已经恢复为按字母顺序排序.
我每次使用都检查了数据帧str()
,结果发现数据框的属性现在不同了,即使我每次都运行相同的代码.
我的代码和输出如下所示.任何人都可以解释不同的行为吗?为什么加载一些显然不相关的包(在我所使用的所有函数似乎都没有被新加载的包掩盖的意义上无关)会改变运行transform()
函数的结果?
案例1:刚加载ggplot2
library(ggplot2)
group = c("C","F","D","B","A","E")
num = c(12,11,7,7,2,1)
data = data.frame(group,num)
data1 = transform(data, group=reorder(group,-num))
> str(data1)
'data.frame': 6 obs. of 2 variables:
$ group: Factor w/ 6 levels "C","F","B","D",..: 1 2 4 3 5 6
..- attr(*, "scores")= num [1:6(1d)] -2 -7 -12 -7 -1 -11
.. ..- attr(*, "dimnames")=List of 1
.. .. ..$ : chr "A" "B" "C" "D" ...
$ num : num 12 11 7 7 2 1 …
Run Code Online (Sandbox Code Playgroud)