小编hej*_*seb的帖子

使用dplyr删除所有变量都为NA的行

我在看似简单的任务时遇到了一些问题:删除所有变量都NA使用dplyr的所有行.我知道可以使用基本R(删除R矩阵中的所有数据为NA删除R中数据文件的空行)来完成,但我很想知道是否有一种简单的方法可以使用dplyr .

例:

library(tidyverse)
dat <- tibble(a = c(1, 2, NA), b = c(1, NA, NA), c = c(2, NA, NA))
filter(dat, !is.na(a) | !is.na(b) | !is.na(c))
Run Code Online (Sandbox Code Playgroud)

filter上面的调用做了我想要的但是在我面临的情况下它是不可行的(因为有大量的变量).我想可以通过使用filter_并首先使用(长)逻辑语句创建一个字符串来实现它,但似乎应该有一个更简单的方法.

另一种方法是使用rowwise()do():

na <- dat %>% 
  rowwise() %>% 
  do(tibble(na = !all(is.na(.)))) %>% 
  .$na
filter(dat, na)
Run Code Online (Sandbox Code Playgroud)

但这看起来并不太好,虽然它完成了工作.其他想法?

r dplyr tidyverse

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

使用带有R和Latex的xtable,列名中的数学模式?

我正在使用xtable在编译我的TeX文档时自动从R编译表.我的问题是如何将表中的变量名称(在我的情况下是数据帧中的列名称)置于数学模式中.我已将结果存储在数据框adf.results中,基本上我想要的是

colnames(adf.results) <- c(" ", "$m^r_t$", "$\delta p_t$",
                           "$R^r_t$", "$R^b_t$", "$y^r_t$")
Run Code Online (Sandbox Code Playgroud)

但这只是插入$m^r_t$...作为列名而不将它们解释为数学模式.有没有人有办法解决吗?

latex r sweave xtable

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

使用geom_line和geom_ribbon的传奇

我创造了一个数字,我周围有一条线和信心带.要做到这一点,我同时使用geom_line,并geom_ribbonggplot2在河的问题是如何应对的传说.在其中,添加斜杠,谷歌搜索了一段时间后,我明白这是一个常见的问题.我发现的大多数解决方案都是用于条形图(例如ggplot cookbook).我也找到了抑制它的解决方案,但这对我没用.

下面我有三个图表显示了这个问题.首先,当我只绘制线条时,它看起来很好.然后,当我添加绘图的功能区部分时,会添加斜杠.第三个图是我希望它看起来的样子(显然是斜杠).我该如何实现这一目标?

在此输入图像描述

编辑:要清楚,我想要的是下图中的内容(我使用MS Paint修复):

在此输入图像描述

library(ggplot2)
library(gridExtra)

set.seed(1)
y <- sin(seq(1, 2*pi, length.out = 100))
x <- 1:100
plotdata <- data.frame(x=x, y=y, lower = (y+runif(100, -1, -0.5)), upper = (y+runif(100, 0.5, 1)))
h1 <- ggplot(plotdata) + geom_line(aes(y=y, x=x, colour = "sin"))
h2 <- h1 + geom_ribbon(aes(ymin=lower, ymax=upper, x=x, colour = "bands"), alpha = 0.3)
h3 <- h2 + scale_colour_manual(name='', values=c("bands" = "grey", "sin" = "blue"))

grid.arrange(h1, h2, h3)
Run Code Online (Sandbox Code Playgroud)

plot r ggplot2

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

如何获取“摘要”以在R中使用自定义类

我想知道如何summary(object)在创建的包中使用自定义类。例如,如果运行以下命令:

testfunction <- function(x) {
  x.squared <- x^2
  x.double <- 2*x
  x.triple <- 3*x

  result <- list(squared = x.squared, double = x.double, triple = x.triple)
  class(result) <- "customclass"
  result
}

x <- rnorm(100)
output <- testfunction(x)
summary(output)
Run Code Online (Sandbox Code Playgroud)

您会看到输出非常无用。但是,我似乎找不到如何控制此输出的方法。如果有人可以引导我去做某事,我将不胜感激。

(当然,我可以制作一个自定义的汇总函数,例如summary.Custom(object),但是我更希望常规summary方法可以直接工作。

r package

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

使用check()测试失败

我正在尝试在我的软件包中添加一些测试,以确保在进行更改时保持原样.我这样做有些困难.

我想测试我的包的主要功能,可以粗略地描述为插补方法.因此,如果我给第二列有一些的n x 2矩阵,它应该返回第一列中的第一列并且是相同的(因为它完全被观察到),第二列应该被估算,因此第二列中没有.YNAZYZNAZ

显然,该函数还有其他几个输入,但我测试的主要结构是

context("Test output")
test_that("First column equal", {
  set.seed(100)
  Y <- matrix(rnorm(200), 100, 2)
  Y[seq(1, 100, by = 3), 2] <- NA
  out <- my_fun(Y)
  expect_equal(Y[, 1], out[, 1])
})
Run Code Online (Sandbox Code Playgroud)

我的问题是这不起作用.它在我运行时有效devtools::test(),但在运行时无效devtools::check().我尝试使用expect_equal_to_reference()(因为我真正想要测试的是比这个例子更大,更强制),但它也会抛出错误,尽管在控制台中运行代码并与保存的.rds文件进行比较表明它们是相同的.

我发现哈德利的这句话(在测试中):

有时,当使用devtools :: test()以交互方式运行时,测试可能会出现问题,但在进行R CMD检查时会失败.这通常表明您对测试环境做出了错误的假设,而且通常很难弄清楚.

这不是好兆头,但我该怎么办?有任何想法吗?

这是我得到的错误(test_file是包含上述代码的文件的名称):

checking tests ...
** running tests for arch 'i386' ... ERROR
Running the tests in 'tests/testthat.R' failed.
Last …
Run Code Online (Sandbox Code Playgroud)

environment r devtools package testthat

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

回收旧的 R 包

2013 年初,我创建了一个 R 包,其中包含一个用于模型评估的函数。我这样做的部分原因是为了学习经验,从那时起我几乎忘记了这个包。我最近收到一个关于该软件包的问题,​​现在想更新它。

我的问题:自从我创建包以来,我已经更改了我的姓氏,因此也更改了我的电子邮件地址。我无法再访问我的旧地址,这是存在于DESCRIPTION. 我的旧电子邮件地址和新电子邮件地址共享同一个域,因此它们非常相似。

我的问题:在这种情况下我该如何更新包和维护者?我可以重新提交包裹,更改名称/电子邮件并在随附的评论中描述情况吗?

r cran

5
推荐指数
1
解决办法
78
查看次数

xtable和标题对齐

是否可以在xtable中使用标题对齐,这与表格其余部分中使用的对齐方式不同?在我的情况下,我希望我的标题中心对齐,但表本身应该是右对齐的.

latex r sweave xtable

4
推荐指数
2
解决办法
1888
查看次数

“这些采样器不能在并行代码中使用”

我正在阅读rgen包的插图,该插图提供了一些常见发行版中的采样头。在第一段中,它说:

请注意,这些采样器就像armadillo中的采样器一样,不能在并行化代码中使用,因为基础生成例程依赖于单线程的R调用。

这对我来说是个新闻,而且我已经使用RcppArmadillo已有相当长的一段时间了。我想知道是否有人可以详细说明这一点(或提供我可以从中阅读该问题的参考)。我对在这里学习“不能使用”的含义特别感兴趣;结果会是错误的,还是只是不能并行化?

r rcpp

4
推荐指数
1
解决办法
69
查看次数

使用R的xtable rownames

我正在使用R和LaTeX以及用于表的xtable包.我有点疑惑为什么我指定的rownames没有显示在我的表中.这是一个例子:

\documentclass[a4paper, 11pt]{article}
\usepackage[english]{babel}
\usepackage[T1]{fontenc}
\begin{document}
\SweaveOpts{concordance=TRUE}
<<results=tex, fig=FALSE, echo=FALSE>>=
library(xtable)
table.matrix <- matrix(numeric(0), ncol = 5, nrow = 12)
colnames(table.matrix) <- c("$m_t$", "$p_t$", "$R^b_t$", "$R^m_t$", "$y^r_t$")
rownames(table.matrix) <- c("$m_{t-1}$", " ", "$p_{t-1}$", " ", "$R^b_{t-1}$", " ", "$R^m_{t-1}$", " ", "$y^r_t$", " ", "$c$", " ")

tex.table <- xtable(table.matrix)
align(tex.table) <- "c||ccccc"
print(tex.table, include.rownames = TRUE, hline.after = c(-1, 0, seq(0, nrow(table.matrix), by = 2)), sanitize.text.function = function(x){x})
@
\end{document}
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎很简单.基本上我所拥有的是对简单VAR模型的估计,在行中我希望变量带有(t-1)下标,每隔一行应该有p值(它们现在在名称向量中是空的).有任何想法吗?

编辑:正如nograpes所指出的,一些rownames是重复的问题.有谁知道如何绕过这个(不使用第一列作为名称列)?我只是希望均匀编号的行为空,或者某种指示它们是p值.

latex r sweave xtable

3
推荐指数
1
解决办法
4759
查看次数

创造漂亮的输出

我一直致力于一项雄心勃勃的功能,我希望一旦完成,我就可以使用我以外的其他人.当我只使用这个功能时我可以忍受输出有点蹩脚,但如果我想要一些漂亮的输出怎么办?我正在寻找的基本上是这样的:

  • 一种打印控制台可读内容的方法
  • 能够访问打印的内容

更具体地说,假设我有三个标量的对象我想要打印:stat,dfreepval.目前,我这样做的方式是:

result <- list(statistic = stat, degrees = dfree, p.value = pval)
return(result)
Run Code Online (Sandbox Code Playgroud)

这样我可以通过运行来访问这些值,例如(调用该函数whites.htest):

whites.htest$p.value
Run Code Online (Sandbox Code Playgroud)

它有效,但输出有点难看.

> whites.htest(var.modell)
$statistic
[1] 36.47768

$degrees
[1] 30

$p.value
[1] 0.1928523
Run Code Online (Sandbox Code Playgroud)

如果我们运行这样的简单VAR模型:

> library(vars)
> data <- matrix(rnorm(200), ncol = 2)
> VAR(data, p = 2, type = "trend")

VAR Estimation Results:
======================= 

Estimated coefficients for equation y1: 
======================================= 
Call:
y1 = y1.l1 + y2.l1 + y1.l2 + y2.l2 + trend 

       y1.l1        y2.l1 …
Run Code Online (Sandbox Code Playgroud)

r function output

3
推荐指数
1
解决办法
1508
查看次数

逗号和句点之间的模式的正则表达式

经过几个小时的谷歌搜索和徒劳无功的尝试,我希望有人可以帮助解决这个公认的简单问题(虽然显然我的regexps是相当陌生的).

我有以下类型的数据:

name <- c("Doe, Mr. John")
Run Code Online (Sandbox Code Playgroud)

我想要"先生",但实际的标题各不相同.我的主要问题是我如何编写正则表达式来捕获"先生"部分,而没有其他任何东西?

我目前的做法如下:

library(stringr)
str_split(name, "[,\\s.]")[[1]][[3]]
Run Code Online (Sandbox Code Playgroud)

我设法使用提取做的最好的是:

str_extract(name, ", .*\\.")
Run Code Online (Sandbox Code Playgroud)

我确信有一种更简单的方法,任何人都可以帮助我吗?

regex r stringr

2
推荐指数
1
解决办法
567
查看次数

标签 统计

r ×11

latex ×3

sweave ×3

xtable ×3

package ×2

cran ×1

devtools ×1

dplyr ×1

environment ×1

function ×1

ggplot2 ×1

output ×1

plot ×1

rcpp ×1

regex ×1

stringr ×1

testthat ×1

tidyverse ×1