我有一个看起来像这样的tbl_df:
> d
Source: local data frame [3,703 x 3]
date value year
1 2001-01-01 0.1218 2001
2 2001-01-02 0.1216 2001
3 2001-01-03 0.1216 2001
4 2001-01-04 0.1214 2001
5 2001-01-05 0.1214 2001
.. ... ... ...
Run Code Online (Sandbox Code Playgroud)
几年的日期范围.
我想得到value每年的最新价值(不一定是31-12).有没有办法使用如下的成语:d %>% group_by(year) %>% summarise(...)?
我正在尝试使用 renderPrint 在闪亮页面中包含模型摘要;代码如下:
# server.R
shinyServer( function(input, output) {
output$modelSummary <- renderPrint(
summary(model())
)
})
# ui.R
fluidPage(
sidebarLayout(
mainPanel(textOutput(outputId = "modelSummary"))
)
)
Run Code Online (Sandbox Code Playgroud)
model()是一个lm存储在反应变量中的非常简单的模型。
输出看起来(在我的 OS X 和 Win 机器上)是这样的:
我看到两个问题:
如何获得与 R 控制台中相同的干净打印输出?
我运行 R 3.2.2 和闪亮的 0.12.2。
快速,可能是愚蠢的问题:在R markdown/knitr文档中,是否可以在实际调用函数后将函数定义放在doc的末尾(例如在附录中)?
使用magrittr(或dplyr),我发现自己经常使用以下模式:
x <- x %>%
fun %>%
fun
Run Code Online (Sandbox Code Playgroud)
是否有常用的快捷方式或成语?我的意思是,一个操作数,例如%^>%,可以写一个:
x %^>% fun ...
Run Code Online (Sandbox Code Playgroud) 首先,这是tbl_df我正在使用的数据(简化):
> mytbldf
Source: local data frame [6 x 5]
iso2c country year var1 var2
1 BI Burundi 2011 4.486265 6.693711
2 BI Burundi 2012 3.939242 5.330326
3 BI Burundi 2013 4.286439 5.747370
4 UG Uganda 2011 3.998849 10.025680
5 UG Uganda 2012 4.606198 13.416311
6 UG Uganda 2013 4.746322 15.981362
Run Code Online (Sandbox Code Playgroud)
我想传播(用tidyr的措辞)年变量var1和var2.经过一些(...)迭代后,我发现了一个有效的语法:
> recast(mytbldf, iso2c + country ~ variable + year, measure.var = c("var1","var2"))
iso2c country var1_2011 var1_2012 var1_2013 var2_2011 var2_2012 var2_2013
1 BI …Run Code Online (Sandbox Code Playgroud) 我正在比较dplyr和"plain R"中的常见"整理"操作(请参阅此处的输出和源代码以了解我的意思).
我很难找到一个"规范" 和简洁的方法来选择仅使用变量名称的列(通过规范,我的意思是纯粹的普通R,对于对R最不了解的人来说很容易理解(所以没有"巫毒技巧")).
例:
## subset: all columns from "var_1" to "var_2" excluding "var_3"
## dplyr:
table %>% select(var_1:var_2, -var_3)
## plain R:
r <- sapply(c("var_1", "var_2", "var_3"), function(x) which(names(table)==x))
table[ ,setdiff(r[1]:r[2],r[3]) ]
Run Code Online (Sandbox Code Playgroud)
有什么建议可以改进普通的R语法吗?
编辑
我实现了一些建议并比较了不同语法的性能,并注意到使用match并subset导致性能出乎意料地下降:
# plain R, v1
system.time(for (i in 1:100) {
r <- sapply(c("size", "country"), function(x) which(names(cran_df)==x))
cran_df[,r[1]:r[2]] } )
## user system elapsed
## 0.006 0.000 0.007
# plain R, using match
system.time(for …Run Code Online (Sandbox Code Playgroud)