我需要他们的第一个字符缩写部门名称,因此strDept="Department of Justice"成为strDeptAbbr = "DoJ".
如何使用来缩写字符串stringr?
谢谢
这个问题与这个问题类似:How to set limit foraxes in ggplot2 Rplots? ,不同之处在于我只想限制一侧(例如仅绘制 x>0 而不是 -5000 < x < 5000 )并使用facets.
请注意,我想知道这两种简单情况的解决方案:
scale_x_continuous(limits = c(-5000, 5000))(与 相同xlim(-5000, 5000)) - 它完全不考虑点(例如,它们不会用于geom_smooth())
coord_cartesian(xlim = c(-5000, 5000))函数 - 它只是不绘制它们(但仍然用于 geom_smooth())
当您使用facet_wrap(~veg, scales = "free_x)并且不知道每个方面的 x 上限是多少时,这种情况经常发生,但您知道它们总是积极的。
有一个选项可以更改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.
这是一种非常典型的情况:当您绘制有关数据的任何内容时 - 您需要显示这些数据的样本大小
我是 的粉丝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) 更新(2018 年 4 月):
\n在不同的设置和计算机下,问题仍然存在。\n我相信它与所有 UNICODE、UTF-8 字符有关。
问题:
\n\n我的 Rmd/R 文件以 UTF-8 编码保存。其他sessionInfo()详情:
Platform: x86_64-w64-mingw32/x64 (64-bit)\nLC_CTYPE=English_Canada.1252\n\nother attached packages:\n[1] knitr_1.17\nRun Code Online (Sandbox Code Playgroud)\n\n这是一个简单的数据框,我需要将其打印为 html 文档中的表格,例如使用kable(dt)或任何其他方式。
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)\nRun Code Online (Sandbox Code Playgroud)\n\n以下任一方法都不起作用:
\n\n如果我保持 Sys.setlocale() 不变(即"English_Canada.1252"),那么我会得到:
> 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 |\nRun Code Online (Sandbox Code Playgroud)\n\n请注意,<U+....>打印的是字符而不是字符。
\n使用dt$name <- enc2utf8(as.character(dt$name)) …
我发现,当我尝试在控制台 a 中打印时data.table(例如,通过键入dt并按 Enter 键),它通常不会打印任何内容。所以我必须输入两到三遍(比如dt;dt;dt)然后它就会被打印出来。
没什么大不了的,但我很好奇为什么会发生这种情况?是我做的不对,还是data.table包装出了问题?
抱歉,我无法进行 reprex - 因为这种情况似乎并没有确定性地发生。但它经常发生在对 data.table 进行一系列的修改之后(ef dt[, a:=b+c][, aa:=2*a])
在评估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)
注意(感谢下面的回复):如果您需要通过引用更改变量值,则需要使用 …
在对带时间戳的数据进行预测建模时,我想在 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) 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) 在 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或任何其他包。