在 R DT 中,您可以使用以下代码定义表控制元素:
# only display the table, and nothing else
library(DT)
datatable(mtcars, options = list(dom = 't'))
Run Code Online (Sandbox Code Playgroud)
上面是t一个DOM。DOM 元素l控制改变输入控件的长度,基本上就是你的表格有多长。看起来像这样。
此长度更改输入控件的默认值为 10。如何将此默认值更改为 25、100,甚至“全部”?
gsub("(?<![0-9])0+", "", c("005", "0AB", "000", "0"), perl = TRUE)
#> [1] "5" "AB" "" ""
gsub("(^|[^0-9])0+", "\\1", c("005", "0AB", "000", "0"), perl = TRUE)
#> [1] "5" "AB" "" ""
Run Code Online (Sandbox Code Playgroud)
上面的正则表达式来自这个 SO 线程,解释了如何从 R 中的字符串中删除所有前导零。作为这个正则表达式的结果,“000”和“0”都被转换为“”。相反,我想从字符串中删除所有前导零,除了最后一个字符恰好为零或唯一字符为零的情况。
"005" would become "5"
"0AB" would become "AB"
"000" would become "0"
"0" would become "0"
Run Code Online (Sandbox Code Playgroud)
另一个 SO 线程解释了如何做我想做的事,但我认为我的语法不太正确,在 R 中应用解决方案。而且我真的不明白下面第一个和第二个解决方案之间的区别(如果它们确实有效)。
gsub("s/^0*(\d+)$/$1/;", "", c("005", "0AB", "000", "0"), perl = TRUE) # 1st solution
# Error: '\d' is an unrecognized escape …Run Code Online (Sandbox Code Playgroud) 我可以在 R 中使用以下代码在任何通用 SQL 数据库中选择不同的行。我会使用,dplyr::distinct()但 SQL 语法不支持它。无论如何,这确实有效:
dbGetQuery(database_name,
"SELECT t.*
FROM (SELECT t.*, ROW_NUMBER() OVER (PARTITION BY column_name ORDER BY column_name) AS SEQNUM
FROM table_name t
) t
WHERE SEQNUM = 1;")
Run Code Online (Sandbox Code Playgroud)
我一直在成功地使用它,但想知道如何在其他 dplyr 步骤之后通过管道传输相同的 SQL 查询,而不是仅将其用作如上所示的第一步。这最好用一个例子来说明:
distinct.df <-
left_join(sql_table_1, sql_table_2, by = "col5") %>%
sql("SELECT t.*
FROM (SELECT t.*, ROW_NUMBER() OVER (PARTITION BY column_name ORDER BY column_name) AS SEQNUM
FROM table_name t
) t
WHERE SEQNUM = 1;")
Run Code Online (Sandbox Code Playgroud)
所以我有dplyr::left_join()两个 SQL 表,然后我想查看不同的行,并保留所有列。我是否如上所示将 SQL 代码通过管道传输到 R 中(仅使用该 …
如何获得基础 R 绘图标题和副标题以模仿 ggplots?我希望所有内容都左对齐,没有粗体,副标题直接在标题下方。
我还想在所有东西之间留出更多空间。也许我的换行符\n“hack”是实现这一目标的最佳方式?
plot(mtcars)
title(main = "I want main title NOT bold and left aligned\n\n",
sub = "Sub title should be under the main title left aligned")
Run Code Online (Sandbox Code Playgroud)
library(tidyverse)
con <- DBI::dbConnect(RSQLite::SQLite(), ":memory:")
copy_to(con, mtcars)
mtcars2 <- tbl(con, "mtcars")
Run Code Online (Sandbox Code Playgroud)
我可以在上面创建这个模拟 SQL 数据库。我可以在这个“数据库”上执行标准的 dplyr 函数非常酷:
mtcars2 %>%
group_by(cyl) %>%
summarise(mpg = mean(mpg, na.rm = TRUE)) %>%
arrange(desc(mpg))
#> # Source: lazy query [?? x 2]
#> # Database: sqlite 3.29.0 [:memory:]
#> # Ordered by: desc(mpg)
#> cyl mpg
#> <dbl> <dbl>
#> 1 4 26.7
#> 2 6 19.7
#> 3 8 15.1
Run Code Online (Sandbox Code Playgroud)
看来我无法使用没有直接 SQL 等效项的 dplyr 函数(例如dplyr::slice())。在这种情况下的slice()我可以使用的替代组合filter(),并row_number()得到相同的结果只用slice()。但是当没有这么简单的解决方法时会发生什么? …
library(tidyverse)
iris %>% as_tibble() %>% select(everything())
#> # A tibble: 150 x 5
#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> <dbl> <dbl> <dbl> <dbl> <fct>
#> 1 5.1 3.5 1.4 0.2 setosa
#> 2 4.9 3 1.4 0.2 setosa
#> 3 4.7 3.2 1.3 0.2 setosa
#> 4 4.6 3.1 1.5 0.2 setosa
#> 5 5 3.6 1.4 0.2 setosa
#> 6 5.4 3.9 1.7 0.4 setosa
#> 7 4.6 3.4 1.4 0.3 setosa
#> 8 5 3.4 1.5 0.2 …Run Code Online (Sandbox Code Playgroud) library(tidyverse)
df <- tibble(col1 = c("A", "B", "C"),
col2 = c(NA, Inf, 5))
#> # A tibble: 3 x 2
#> col1 col2
#> <chr> <dbl>
#> 1 A NA
#> 2 B Inf
#> 3 C 5
Run Code Online (Sandbox Code Playgroud)
我可以使用基本 Ris.na()函数轻松地将NAs 替换为0s,如下所示:
df %>% replace(is.na(.), 0)
#> # A tibble: 3 x 2
#> col1 col2
#> <chr> <dbl>
#> 1 A 0
#> 2 B Inf
#> 3 C 5
Run Code Online (Sandbox Code Playgroud)
如果我尝试在is.infinite()事情中断的情况下复制这个逻辑:
df …Run Code Online (Sandbox Code Playgroud) library(tidyverse)
ggplot(mpg, aes(cty, hwy)) +
geom_point() +
facet_grid(year ~ fl) +
geom_hline(yintercept = mean(mpg$hwy))
Run Code Online (Sandbox Code Playgroud)
我希望geom_hline()上面显示的方面中的每个都是仅包含在该方面中的点的平均值。我认为我可以用(如下)之类的东西来做到这一点。但这不起作用。我很接近,对吧?
library(tidyverse)
ggplot(mpg, aes(cty, hwy)) +
geom_point() +
facet_grid(year ~ fl) +
geom_hline(yintercept = mean(mpg %>% group_by(year, fl)$hwy))
Run Code Online (Sandbox Code Playgroud) 我想重点关注上面的流程,将蓝色的"热量发电"块连接到粉红色的"电网"块.你会注意到流量是526 TWh,这是#62行Energy$links.
Energy$links
source target value
...
62 26 15 525.531
...
Run Code Online (Sandbox Code Playgroud)
现在让我们关注引用节点的source和target值Energy$nodes.
Energy$nodes
name
...
15 Heating and cooling - homes
16 Electricity grid
...
26 Gas reserves
27 Thermal generation
...
Run Code Online (Sandbox Code Playgroud)
source当它实际引用节点数据的行"27"时,该值为"26".当实际引用节点数据的行"16"时,目标值为"15".为什么链接数据中的源和目标值实际上是指节点数据中的行 x-1而不是x?除了在构建这些Sankey图时在我头脑中执行x - 1计算时,还有什么方法吗?
这是完整的Energy数据:
> Energy
$`nodes`
name
1 Agricultural 'waste'
2 Bio-conversion
3 Liquid
4 Losses
5 Solid
6 Gas
7 Biofuel imports
8 Biomass imports
9 …Run Code Online (Sandbox Code Playgroud) 我正在使用名为openxlsx的 R 包。我已经创建了AlignStyle如下所示的内容。我想将此样式应用于标题为“test-sheet”的整个工作表。当我尝试将此样式应用于 Excel 工作表的所有行和所有列时,我得到一个Error in 1:Inf : result would be too long a vector.
# Define a style
AlignStyle <- createStyle(halign = "CENTER", valign = "TOP")
# Apply the style
addStyle(wb, "test-sheet", style = AlignStyle, rows = 1:Inf, cols = 1:Inf, gridExpand = TRUE)
Run Code Online (Sandbox Code Playgroud)
我知道我可以做类似的事情rows = 1:nrows(df),但我的数据框的名称并不总是df。
您知道我可以使用openxlsx R 包将样式应用到整个工作表或整个工作簿的另一种方法吗?