我有一个数据帧:
foo <- list(df1 = data.frame(x=c('a', 'b', 'c'),y = c(1,2,3)),
df2 = data.frame(x=c('d', 'e', 'f'),y = c(4,5,6)))
Run Code Online (Sandbox Code Playgroud)
我可以将其转换为表单的单个数据框:
data.frame(x = c('a', 'b', 'c', 'd', 'e', 'f'), y= c(1,2,3,4,5,6))
Run Code Online (Sandbox Code Playgroud)
?
我写了一个R包,现在是一个合作者(最近的CS毕业生,他是R的新手)正在编辑和重构代码.在这个过程中,他将我的功能划分为更小,更通用的功能.
他的所作所为是有道理的,但是当我开始时package.skeleton(),每个功能都有一个文件.现在,他添加了主要功能所依赖的功能,但这可能在功能本身之外的使用有限.
他建议所有函数都放在一个文件中,但我反对,因为当我们处理不同的文件时,它更容易进行版本控制.
我已经开始使用roxygen来记录文本中的每个功能.
处理函数的推荐方法是什么:显然辅助函数应该与main函数保持一致,但是我需要在多大程度上记录辅助函数?
@export评论中的建议很有帮助,但我很想知道其他人如何组织他们的代码.
我有一个中等大小的数据库,有许多连接和查找表.
我比使用SQL更熟悉R,而且我使用的是MySQL.
在什么时候有什么好处停止增加SQL语句的复杂性有利于在R中的数据子集功能(例如,merge,*apply,maply,dlply,等)R.
一方面,SQL的连接比选择每个表的所有内容并使用R merge函数加入它们更容易.此外,在SQL中执行条件选择将减少必须导入到R的数据量; 但速度差异并不显着.
另一方面,与R语法相比,具有复杂where子句的大连接变得不那么容易理解.
下面我有一些未经测试的代码用于说明目的:我在使用代码之前问这个问题,我的问题的答案不需要工作代码(尽管总是赞赏) - "最优雅的方法","最少线条",或"X的惊人实施"总是受到赞赏,但我特别感兴趣的是"最明智/实用/规范/基于第一原则"的理由.
我对哪些步骤应该使用SQL where子句以及哪些步骤使用R更容易实现的一般答案感兴趣.
有三个表:a,ab,和b.表a和b每个都有一个主键id.它们有一个由查找表表示的多对多关系ab,它包含字段ab.a_id并分别ab.b_id连接到a.id和b.id.两个表都有一个time字段,一个group字段有一个字段.
这是我想要做的连接和子集的最小示例;
(MySQL命名元素,例如a.id等同a$id于R)
连接表a并b使用ab,将b.time每个关联的多个值a.id作为新列附加;
select a_time, b.time, a.id, b.id from
a join …Run Code Online (Sandbox Code Playgroud)我被要求更改当前导出.Rdata文件的软件,以便以"平台无关的二进制格式"导出,例如HDF5或netCDF.有两个原因:
我还发现 "R数据导入导出手册"没有讨论Rdata文件,尽管它确实讨论了HDF5和netCDF.
一对R-帮助的讨论表明,.Rdata文件是平台无关的.
我有一个包含以下列的表:
mytable <- data.frame(beta_0 = c(1,2,3)
Run Code Online (Sandbox Code Playgroud)
我想要做的是在乳胶标记中输出一个带有列标题的表,例如 $\beta_0$
但是,我似乎无法弄清楚如何输出"$\beta_0 $"使用print.xtable:
colnames(mytable) <- "$\beta_0$"
library(xtable)
print(xtable(mytable), include.rownames = F)
Run Code Online (Sandbox Code Playgroud)
返回列标题
\eta\_0\$
Run Code Online (Sandbox Code Playgroud)
代替
$\beta_0$
Run Code Online (Sandbox Code Playgroud)
我认为答案是"sanitize.colnames.function"参数print.xtable,但对我来说如何使用它并不明显,并且?print.xtable没有提供任何示例.
具体来说,我想输出一个乳胶表,如:
\begin{table}[ht]
\begin{center}
\begin{tabular}{r}
\hline
$\beta_0$ \\
\hline
1.00 \\
2.00 \\
3.00 \\
\hline
\end{tabular}
\end{center}
\end{table}
Run Code Online (Sandbox Code Playgroud) 例如,我想根据名称的子集选择行
如果我有以下数据:
data <- structure(c(91, 92, 108, 104, 87, 91, 91, 97, 81, 98),
.Names = c("fee-", "fi", "fo-", "fum-", "foo-", "foo1234-", "123foo-",
"fum-", "fum-", "fum-"))
Run Code Online (Sandbox Code Playgroud)
如何选择匹配'foo'的行?
使用grep()不起作用:
grep('foo', data)
Run Code Online (Sandbox Code Playgroud)
收益:
integer(0)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?或者,还有更好的方法?
谢谢!
我喜欢使用bash别名来自定义bash命令.有没有办法覆盖bash别名设置,或者我应该将别名重命名为与原始命令不同的东西.
例如:我的.bash_aliases包括
alias ls='ls -ltr'
Run Code Online (Sandbox Code Playgroud)
如果我只想检索文件名,是否需要将别名重命名为"ls"以外的其他名称?或者还有另一种方式吗?
该data.table包提供了许多与SQL相同的表处理方法.如果表具有键,则该键由一列或多列组成.但是一个表不能有多个键,因为它不能同时以两种不同的方式排序.
在这个例子中,X和Y是data.tables的一个单一的键列"ID"; Y还有一个非键列"x_id".
X <- data.table(id = 1:5, a=4:8,key="id")
Y <- data.table(id = c(1,1, 3,5,7), x_id=c(1,4:1), key="id")
Run Code Online (Sandbox Code Playgroud)
以下语法将在其键上连接表:
X[Y]
Run Code Online (Sandbox Code Playgroud)
如何将以下SQL语法转换为data.table代码?
select * from X join Y on X.id = Y.x_id;
Run Code Online (Sandbox Code Playgroud)
我得到的最接近的是:
Y[X,list(id, x_id),by = x_id,nomatch=0]
Run Code Online (Sandbox Code Playgroud)
但是,这不会与SQL语句执行相同的内部联接.
这是一个更清晰的例子,其中外键是y_id,我们希望连接查找Y2的值X2$y_id = Y2$id.
X2 <- data.table(id = 1:5, y_id = c(1,1,2,2,2), key="id")
Y2 <- data.table(id = 1:5, b = letters[1:5], key="id")
Run Code Online (Sandbox Code Playgroud)
我想制作表格:
id y_id b
1 1 "a"
2 1 "a"
3 2 …Run Code Online (Sandbox Code Playgroud) 我生成的图形将用作三面板图形右侧的标签列,我希望图形的标题与图中的标签一样右对齐.
这是一个最小的例子,我想右对齐标题'单词'.
ggplot() +
geom_text(aes(y = 1, x = seq(4),
label = c('fee', 'fi', 'fo', 'fum'),
hjust = 1)) +
opts(title = 'words') +
coord_flip() +
scale_y_continuous(breaks = c(0,0), limits = c(0,1))
Run Code Online (Sandbox Code Playgroud)
产生这个:

更新
@joran的答案很有帮助,但它没有将标签与标签对齐.改变他的代码hjust=1来hjust = 0.96接近,但这更像是一个黑客而不是一个令人满意的答案.