小编Pav*_*ive的帖子

在 grid.arrange 的左上角找到标题

我有两个与gridExtra::grid.arrange. 我可以用top参数在它们上面加上一个标题。问题是,我被要求在情节的左上角找到标题。

一个可重现的例子:

library(ggplot2)
library(gridExtra)

p1 <- qplot(1:20)
p2 <- qplot(30, 35)
grid.arrange(p1, p2, nrow = 1, top = "Title")
Run Code Online (Sandbox Code Playgroud)

产生

在此处输入图片说明

但我需要的是:

在此处输入图片说明

我读了好几次?arrangeGrob文件(我认为这是我的答案),但还没有想出如何实现它。

r gridextra grob

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

R grep在向量中找到多个完整的单词

我有一个字符串向量,说:

vect<-c("oxidor magnesio","oxido magnesio","oxido calcio", "oxidante","oxido calcio magnesio","magnesio oxido")
Run Code Online (Sandbox Code Playgroud)

我想找到两个词的出现,"oxido""magnesio".我正在做的是

intersect(grep("\\boxido\\b",vect),grep("\\bmagnesio\\b",vect))
Run Code Online (Sandbox Code Playgroud)

但,

  1. 问题1:有没有直接的 grep命令来实现它?
  2. 问题2:假设我想找到两个单词的出现次数,但是按照给定的顺序(例如,"oxido"后跟"magnesio",所以正确的答案是25).命令是什么?

谢谢,

r intersect

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

R gsub一次替换多个文本

在我的数据框中,有一个带有乘数指示符的列,例如数千,数百,数百万等,作为文本.

我想将它们转换为数字.这就是我尝试过的:

a <- c("Thousands", "thousands", "Hundreds", "hundreds")
newA <- as.numeric(gsub("[Tt]housands","1000",gsub("[Hh]undreds","100",a)))
Run Code Online (Sandbox Code Playgroud)

哪个有效,但是当有许多乘数时(例如情况),结果非常麻烦.我当时认为应该有一种方法可以在一次gsub通话中完成,但是无法做到.像这样的东西是我想要的(当然这个特殊的尝试不起作用):

as.numeric(gsub("^.*-","",gsub("([Hh]undreds)([Tt]housands)","\\1-100 \\2-1000",a)))
Run Code Online (Sandbox Code Playgroud)

regex r gsub

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

使用dplyr从名称中提取列表

我有一个数据表,其中包含许多产品的日期消耗.我生成了每个产品的预测,现在想要获得平均值,并在期间+1上限80%.问题是预测对象是一个具有不同结构的列表,具体取决于所使用的方法,因此我无法通过索引来检索值(我可以通过名称来检索data.table).

这是(虚拟)数据和代码:

# load required libraries
library(data.table)
library(xts)
library(forecast)
library(dplyr)

# create random data
set.seed(1)
a <- data.table(prod = sample(LETTERS[1:5], 20, TRUE), cons = sample(1:50, 20, TRUE), dt = sample(seq(as.Date("2016/06/01"), as.Date("2016/07/27"), by = "day"), 20, FALSE))

# create a time series of purchases
b <- a[, .(C=sum(cons)), by = .(dt, prod)][, x := .(list(xts(x = C, order.by = dt))), by = prod]
b <- b[, .SD[1,], by = prod]

# create a "reference" timeseries
dts <- xts(order.by = …
Run Code Online (Sandbox Code Playgroud)

r forecasting dplyr data.table

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

当在 data.table 中链接时,autoplot 将空白图保存到 png 设备

我有一个data.table列有一些值的预测,我想用ggplot2::autoplot.

我正在尝试这个(可重复的例子):

require(data.table)
require(forecast)
require(ggplot2)

## create data.table
a <- data.table(id = 1:2)
a[, x := .(list(sample(1:10, 5, FALSE))), by = id]
a[, y := .(list(forecast(x[[1]]))), by = id]

## plot by id:
a[, {png(paste0(id, ".png")); autoplot(y[[1]]); dev.off()}, by = id]
Run Code Online (Sandbox Code Playgroud)

但它会创建空白画布。

但是,以下代码有效:

png("1.png")
a[1, autoplot(y[[1]])]
dev.off()
Run Code Online (Sandbox Code Playgroud)

这让我认为它与{}. 下一个代码也有效(因为plot不适用于预测对象,我正在绘制x变量:

a[, {png(paste0(id, ".png")); plot([[1]]); dev.off()}, by = id]
Run Code Online (Sandbox Code Playgroud)

这让我想起autoplot.

我做错了什么,有效实现我想要的东西的方法是什么?

r ggplot2 data.table

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

\xdef\@fontenc@load@list{\@fontenc@load@list Rmarkdown 中未定义的控制序列

我尝试编写一个非常简单的 Rmarkdown 文件来呈现为 pdf,但是遇到了undefined control sequence的错误。

文件:

---
title: "Untitled"
author: "author"
date: "3/2/2020"
output: pdf_document
---

# whatever
fskjflsjflkj
Run Code Online (Sandbox Code Playgroud)

保存为 test.Rmd 并编织(使用按钮)在 R markdown 控制台中产生以下输出:

processing file: test.Rmd
output file: test.knit.md

! Undefined control sequence.
l.115 \xdef\@fontenc@load@list{\@fontenc@load@list

Error: LaTeX failed to compile test.tex. See https://yihui.org/tinytex/r/#debugging for debugging tips. See test.log for more info.
Execution halted
Run Code Online (Sandbox Code Playgroud)

以下是相关test.log部分:

Already applied: [0000/00/00] Old fixltx2e package on input line 53.
) (/usr/local/texlive/2019/texmf-dist/tex/latex/base/fontenc.sty
Package: fontenc 2020/02/11 v2.0o Standard LaTeX package …
Run Code Online (Sandbox Code Playgroud)

latex r r-markdown

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

data.table::melt 中的变量值与模式

在回答这个问题patterns时,我尝试将该功能与以下内容一起使用data.table::melt

df1 <- structure(list(Material_code = 111:112, 
                      actual_202009 = c(30L, 19L), 
                      actual_202010 = c(44L, 70L), 
                      actual_202011 = c(24L, 93L), 
                      pred_202009 = c(25L, 23L), 
                      pred_202010 = c(52L, 68L), 
                      pred_202011 = c(27L, 100L)), 
                 class = c("data.table", "data.frame"), 
                 row.names = c(NA, -2L))
Run Code Online (Sandbox Code Playgroud)

我想将宽表转换为长表,将actualpred值分开。我认为日期部分将保留在变量中,但它被更改为因子数字(1、2 等):

melt(df1, 1, measure = patterns(actual = "actual_", pred = "pred_"))[1, ]
>    Material_code variable actual pred
> 1:           111        1     30   25
Run Code Online (Sandbox Code Playgroud)

我想要该字段中的“202009”而不是“1” variable

我完全意识到我可以通过使用以下方法来实现这一目标tstrsplit …

r data.table

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

R中的正则表达式"吃掉"字符串的一部分

我想将一个字符串分成两组.字符串的结构非常简单,但我无法使其工作.

txt <- "text12-01-2016"
Run Code Online (Sandbox Code Playgroud)

它总是一些字母,后跟一个日期和日期,显然是以数字开头.我在https://regex101.com/尝试了以下正则表达式,并有效地将字符串正确分开:

([a-zA-Z]*)([0-9].*)
1. "text"
2. "12-01-2016"
Run Code Online (Sandbox Code Playgroud)

但是当我在R中尝试它失败时:

strsplit(a[1],split = "([a-zA-Z]*)([0-9]*)")
[[1]]
 [1] ""  " " ""  "." " " ""  " " ""  "-" ""  "-" "" 
Run Code Online (Sandbox Code Playgroud)

如果我引入双方括号,那么它"吃掉"第一组的最后一个字符,第二组的第一个字符:

strsplit(txt,split = "([[a-zA-Z]]*)([[0-9]]*)")
[[1]]
[1] "tex"      "2-01-2016"
Run Code Online (Sandbox Code Playgroud)

如果我使用它并不重要perl=TRUE.如果我使用结果也是一致的stringi::stri_split,所以这是我的正则表达式中的一个问题.

在这种情况下使用的正确正则表达式是什么?

regex r string-split stringi

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

R vcd ::马赛克重叠标签

我正在生成一个镶嵌图vcd::mosaic.但是我给出的因素的文本很长(切割它们不是一种选择,并且在很多情况下,介绍\n似乎令人生畏),所以文本中有重叠,我无法强制标签垂直于轴.

这就是我正在尝试的:

a <- data.frame(x=sample(LETTERS[1:4],16,replace = TRUE), 
                y=rep(paste("very long label here at number", 1:4, paste=" "), 4))
mosaic(y ~ x, data= a, las= 2)
Run Code Online (Sandbox Code Playgroud)

但这就是我得到的: 在此输入图像描述

我也tryed par(las= 2)par(las= 3),但这些都不是能够迫使他们垂直对齐(las= 2用效果很好mosaicplot,不过,这就像vcd::mosaic覆盖las无论是作为一个给定的参数或作为默认设置par.我也有打par(mar),但标签足够长,可以欺骗这种解决方法.

我该怎么做才能获得可读标签?

##########编辑添加:##########

我也试过这个,但无济于事:

mosaic(y ~ x, data= a, labeling_list= list(gp_text= gpar(las= 2)))
Run Code Online (Sandbox Code Playgroud)

mosaic(y ~ x, data= a, labeling_list= list(rot_labels = c(0,90,0,0)))
  # Actually placed the "90" in the 4 positions …
Run Code Online (Sandbox Code Playgroud)

plot r mosaic-plot vcd

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

根据嵌套列表融化 data.table

我有一个像这样的 data.table:

library(data.table)    
dt <- data.table(a = c(rep("A", 3), rep("B", 3)), b = c(1, 3, 5, 2, 4, 6))
Run Code Online (Sandbox Code Playgroud)

我需要对 each 的值执行操作(预测)a,所以我决定将它们放在一个列表中,如下所示:

dt <- dt[, x := .(list(b)), by = a][, .SD[1,], by = a, .SDcols = "x"]
Run Code Online (Sandbox Code Playgroud)

现在我想“融化”(这是我想到的东西)dt回到原来的形式。

我可以在很少的级别上做到这a一点:

dt2 <- rbind(expand.grid(dt[1, a], dt[1, x[[1]]]), expand.grid(dt[2, a], dt[2, x[[1]]]))
Run Code Online (Sandbox Code Playgroud)

但当然,该解决方案对于更多级别的a.

我试过了

dt2 <- dt[, expand.grid(a, x[[1]]), by = a]
Run Code Online (Sandbox Code Playgroud)

这导致

dt2
##    a Var1 Var2
## 1: A    A    1
## …
Run Code Online (Sandbox Code Playgroud)

r list data.table

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