小编Jas*_*ter的帖子

使用DT包输出时可以更改R默认表长度吗?

在 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,甚至“全部”?

r shiny dt flexdashboard

13
推荐指数
2
解决办法
3179
查看次数

正则表达式删除 R 中的前导零,除非最后一个(或唯一的)字符为零

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)

regex string r gsub stringr

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

如何通过管道将 SQL 导入 R 的 dplyr?

我可以在 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 中(仅使用该 …

sql r dplyr r-dbi dbplyr

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

调整基础 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)

r_titles

r

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

dbplyr、dplyr 和没有 SQL 等效项的函数 [例如 `slice()`]

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()。但是当没有这么简单的解决方法时会发生什么? …

sql r dplyr r-dbi dbplyr

7
推荐指数
1
解决办法
1267
查看次数

你能列出一个 tidyselect `everything()` 的例外吗

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)

r dplyr tidyr tidyselect

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

替换 R 数据框中的无限值 [为什么 `is.infinite()` 的行为不像 `is.na()`]

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)

r dplyr tidyr

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

ggplot 的每个方面都有不同的 `geom_hline()`

刻面

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)

r ggplot2 dplyr

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

R中的Sankey图与networkD3 - 行号问题

sankey图

我想重点关注上面的流程,将蓝色的"热量发电"块连接到粉红色的"电网"块.你会注意到流量是526 TWh,这是#62行Energy$links.

Energy$links
   source target   value
...
62     26     15 525.531
...
Run Code Online (Sandbox Code Playgroud)

现在让我们关注引用节点的sourcetargetEnergy$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)

r sankey-diagram networkd3 htmlwidgets

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

使用 R 包 openxlsx 将样式应用到整个 Excel 工作表

我正在使用名为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 包将样式应用到整个工作表或整个工作簿的另一种方法吗?

excel r openxlsx

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