小编IVI*_*VIM的帖子

如何在R中缩写字符串

我需要他们的第一个字符缩写部门名称,因此strDept="Department of Justice"成为strDeptAbbr = "DoJ".

如何使用来缩写字符串stringr
谢谢

r stringr

8
推荐指数
2
解决办法
290
查看次数

如何为 ggplot2 中带有小平面的轴设置一个限制?

这个问题与这个问题类似:How to set limit foraxes in ggplot2 Rplots? ,不同之处在于我只想限制一侧(例如仅绘制 x>0 而不是 -5000 < x < 5000 )并使用facets.

请注意,我想知道这两种简单情况的解决方案:

  1. scale_x_continuous(limits = c(-5000, 5000))(与 相同xlim(-5000, 5000)) - 它完全不考虑点(例如,它们不会用于geom_smooth())

  2. coord_cartesian(xlim = c(-5000, 5000))函数 - 它只是不绘制它们(但仍然用于 geom_smooth())

当您使用facet_wrap(~veg, scales = "free_x)并且不知道每个方面的 x 上限是多少时,这种情况经常发生,但您知道它们总是积极的。

r ggplot2

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

geom_col 中的条形宽度是否可以变化?

有一个选项可以更改fill,并且col使用时geom_col 是否可以更改 geom_col 中的条形宽度 - 就像下面最后一行一样?

dt <- data.table(diamonds) [ , .(total=.N, price = mean(price)), by = cut]; dt # data.table to work with

ggplot(dt) + geom_col(aes(x=cut, y=price, fill=total))   # we can do this
ggplot(dt) + geom_point(aes(x=cut, y=price, size=total)) # we can do this

ggplot(dt) + geom_col(aes(x=cut, y=price, size=total))   # this does something different
ggplot(dt) + geom_col(aes(x=cut, y=price, width=total))  # this does not work
Run Code Online (Sandbox Code Playgroud)

或者什么可能是实现所需输出的方法 - 我需要条形的宽度与total.
这是一种非常典型的情况:当您绘制有关数据的任何内容时 - 您需要显示这些数据的样本大小

r ggplot2

6
推荐指数
2
解决办法
2541
查看次数

不希望在传递给函数时修改原始 data.table

我是 的粉丝data.table,因为我喜欢为所有当前和未来的需求编写可重用的函数。

这是我在解决这个问题时遇到的一个挑战: Best way to automatically plot all data.table columns using ggplot2

我们将 data.table 传递给一个函数进行绘图,然后原始的 data.table 被修改,即使我们复制了它来防止这种情况发生。

下面是一个简单的代码来说明:

plotYofX <- function(.dt,x,y) {
  dt <- .dt
  dt[, (c(x,y)) := lapply(.SD, function(x) {as.numeric(x)}), .SDcols = c(x,y)]
  ggplot(dt) + geom_step(aes(x=get(names(dt)[x]), y=get(names(dt)[y]))) + labs(x=names(dt)[x], y=names(dt)[y])
}


> dtDiamonds <- data.table(ggplot2::diamonds[2:5,1:3]); 
> dtDiamonds
   carat     cut color
   <num>   <ord> <ord>
1:  0.21 Premium     E
2:  0.23    Good     E
3:  0.29 Premium     I
4:  0.31    Good     J

> plotYofX(dtDiamonds,1,2); 
> dtDiamonds
    carat   cut color …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 data.table

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

在 R、Rmd、knitr、bookdown 中打印 UTF-8 字符

更新(2018 年 4 月):
\n在不同的设置和计算机下,问题仍然存在。\n我相信它与所有 UNICODE、UTF-8 字符有关。

\n\n

https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/

\n\n

问题:

\n\n

我的 Rmd/R 文件以 UTF-8 编码保存。其他sessionInfo()详情:

\n\n
Platform: x86_64-w64-mingw32/x64 (64-bit)\nLC_CTYPE=English_Canada.1252\n\nother attached packages:\n[1] knitr_1.17\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是一个简单的数据框,我需要将其打印为 html 文档中的表格,例如使用kable(dt)或任何其他方式。

\n\n
dt <- data.frame(\nname=c("\xd0\x91\xd0\xbe\xd1\x80\xd0\xb8\xd1\x81 \xd0\x9d\xd0\xb5\xd0\xbc\xd1\x86\xd0\xbe\xd0\xb2","Martin Luter King"),\nyear=c("2015","1968") \n)\n
Run Code Online (Sandbox Code Playgroud)\n\n

以下任一方法都不起作用:

\n\n

方式一

\n\n

如果我保持 Sys.setlocale() 不变(即"English_Canada.1252"),那么我会得到:

\n\n
> dt;                                                                                           \nname year\n1 <U+0411><U+043E><U+0440><U+0438><U+0441> <U+041D><U+0435><U+043C><U+0446><U+043E><U+0432> 2015\n2 Martin Luter King 1968\n> kable(dt)\n|name                                                                                      |year |\n|:-----------------------------------------------------------------------------------------|:----|\n|<U+0411><U+043E><U+0440><U+0438><U+0441> <U+041D><U+0435><U+043C><U+0446><U+043E><U+0432> |2015 |\n|Martin Luter King                                                                         |1968 |\n
Run Code Online (Sandbox Code Playgroud)\n\n

请注意,<U+....>打印的是字符而不是字符。
\n使用dt$name <- enc2utf8(as.character(dt$name)) …

unicode r utf-8 knitr bookdown

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

为什么 RStudio 的控制台中有时不打印 data.table?

我发现,当我尝试在控制台 a 中打印时data.table(例如,通过键入dt并按 Enter 键),它通常不会打印任何内容。所以我必须输入两到三遍(比如dt;dt;dt)然后它就会被打印出来。

没什么大不了的,但我很好奇为什么会发生这种情况?是我做的不对,还是data.table包装出了问题?

抱歉,我无法进行 reprex - 因为这种情况似乎并没有确定性地发生。但它经常发生在对 data.table 进行一系列的修改之后(ef dt[, a:=b+c][, aa:=2*a]

r data.table

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

如何在函数和循环中使用data.table?

在评估data.table(vs. dplyr)的效用时,关键因素是在函数和循环中使用它的能力.
为此,我修改了这篇文章中使用的代码片段:data.table vs dplyr:一个做得好,另一个做不好或做得不好?这样,代替硬编码的数据集变量名称("钻石"数据集的"切割"和"价格"变量),它变得与数据集无关 - 切割n-paste准备好在任何函数或循环内使用(当我们事先不知道列名.

这是原始代码:

library(data.table)
dt <- data.table(ggplot2::diamonds)
dt[cut != "Fair", .(mean(price),.N), by = cut]  
Run Code Online (Sandbox Code Playgroud)

这是与数据集无关的等价物:

dt <- data.table(diamonds)
nVarGroup <- 2 #"cut"
nVarMeans <- 7 #"price"

strGroupConditions <- levels(dt[[nVarGroup]])[-1] # "Good" "Very Good" "Premium" "Ideal" 
strVarGroup <- names(dt)[nVarGroup]
strVarMeans <- names(dt)[nVarMeans]
qAction <- quote(mean(get(strVarMeans))) #! w/o get() it does not work! 
qGroup <- quote(get(strVarGroup) %in% strGroupConditions) #! w/o get() it does not work! 
dt[eval(qGroup), .(eval(qAction), .N), by = strVarGroup]
Run Code Online (Sandbox Code Playgroud)

注意(感谢下面的回复):如果您需要通过引用更改变量值,则需要使用 …

loops r function dplyr data.table

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

R 中 X 小时的循环时间?

在对带时间戳的数据进行预测建模时,我想在 R 中编写一个函数(可能使用 data.table),将日期四舍五入 X 小时数。例如,按 2 小时四舍五入应该给出:

"2014-12-28 22:59:00 EDT" becomes "2014-12-28 22:00:00 EDT" 
"2014-12-28 23:01:00 EDT" becomes "2014-12-29 00:00:00 EDT" 
Run Code Online (Sandbox Code Playgroud)

当您以 1 小时为单位舍入时,这很容易做到 - 使用 round.POSIXt(.date, "hour")函数。然而,
编写一个通用函数,就像我在下面使用多个if语句所做的那样,变得非常难看:

d7.dateRoundByHour <- function (.date, byHours) { 

  if (byHours == 1)
    return (round.POSIXt(.date, "hour"))

  hh = hour(.date); dd = mday(.date); mm = month(.date); yy = year(.date)    
  hh = round(hh/byHours,digits=0) * byHours
  if (hh>=24) { 
    hh=0; dd=dd+1 
  }
  if ((mm==2 & dd==28) | 
      (mm %in% c(1,3,5,7,8,10,12) & dd==31) | …
Run Code Online (Sandbox Code Playgroud)

r date posixct data.table

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

动态分配/引用 data.table 中的列名(在 i、j 和 by 中)

A) 而不是这个 (where cars <- data.table(cars))

cars[ , .(`Totals:`=.N), by=speed]  
Run Code Online (Sandbox Code Playgroud)

我需要这个

strColumnName <- "Totals:"
cars [ , strColumnName = .N, by=speed]  
Run Code Online (Sandbox Code Playgroud)

怎么做?

B)类似(更一般的情况) - 而不是这个:

cars[ dist > 50, .(`Totals:`=.N, x=dist*100), by=speed] 
Run Code Online (Sandbox Code Playgroud)

我需要这个:

strFactor <- "dist"
cars[ strFactor > 50, .(`Totals:`=.N, x=strFactor*100), by=speed] 
Run Code Online (Sandbox Code Playgroud)

这个问题是关于在 data.table 中分配/引用列名变量的一般方法,即在“j”(RHS 和 LHS)以及“i”和“by”中 - 动态。当在代码中的其他地方选择时这是必需的(例如,用户我在闪亮的应用程序中输入它们)

C) 涉及 i,j 和 by 的一般情况 - 而不是这样:

 cars[ dist > 50, .(`Totals x Factor: ` = .N * dist), by=speed] 
Run Code Online (Sandbox Code Playgroud)

我需要这个:

strFactor <- "dist"; 
strNewVariable <- "Totals x …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

使用knitr在rmarkdown中并排放置两个图像?

在 Rmarkdown 中,我想并排打印网络上的两个图像。我正在尝试这个

```{r, echo=FALSE, out.width="33%", fig.align = "center", fig.cap="Examples of the FPTP bias: In Prairies (left) and Greater Toronto area (right). Source: www.fairvote.ca"}

knitr::include_graphics(
  c("https://www.fairvote.ca/wp-content/uploads/2019/12/Western-alienation-website-FPTP-page.png", "https://www.fairvote.ca/wp-content/uploads/2019/12/Toronto-Peel-halton-2019-results-website-FPTP.jpg")
  )

```
Run Code Online (Sandbox Code Playgroud)

但相反,我得到了这个 - 它们仍然被打印在另一个之上:

在此输入图像描述

请指教。注意:我不知道要使用什么cowplot或任何其他包。

r knitr r-markdown

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

标签 统计

r ×10

data.table ×5

ggplot2 ×3

knitr ×2

bookdown ×1

date ×1

dplyr ×1

function ×1

loops ×1

posixct ×1

r-markdown ×1

stringr ×1

unicode ×1

utf-8 ×1