虽然很基本,但我在任何地方都找不到答案:如何在小标题中禁用科学记数法,而让小标题显示小数?
我有一个简单的 tibble,由lm() %>% broom::tidy().
library(tidyverse)
## I used dput() to get this:
tidy_lm_output <- structure(list(term = c("(Intercept)", "mood", "sleep"), estimate = c(-0.00000000000000028697849703988,
-0.0746522106739049, 0.835867664974019), std.error = c(0.0319620048196539,
0.0464197056030362, 0.0464197056030362), statistic = c(-0.00000000000000897873893265334,
-1.60820086435494, 18.006742053085), p.value = c(0.999999999999993,
0.108628280589954, 9.41480010964234e-53)), row.names = c(NA,
-3L), class = c("tbl_df", "tbl", "data.frame"))
> tidy_lm_output
## # A tibble: 3 x 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) -2.87e-16 0.0320 -8.98e-15 10.00e- …Run Code Online (Sandbox Code Playgroud) 我想使用它生成条形图,ggplot2它将遵循严格的标准:
我使用 RStudio,它允许其查看器具有响应能力。这意味着当我扩大观看者的边界时,绘图也会相应拉伸,增加条形的宽度和条形之间的间距。相反,缩小观察者的边界将使条形变细并减少条形之间的空间。
类似地,在给定的查看器边界内,绘制条形图将产生 6 个条形与仅 2 个条形不同的条形宽度。
library(ggplot2)
library(dplyr)
p_all_bars <-
mpg %>%
ggplot(aes(x = class)) +
geom_bar()
p_two_bars <-
mpg %>%
filter(class == "compact" | class == "suv") %>%
ggplot(aes(x = class)) +
geom_bar()
Run Code Online (Sandbox Code Playgroud)
p_all_bars
Run Code Online (Sandbox Code Playgroud)
p_two_bars
Run Code Online (Sandbox Code Playgroud)
如果我保存尺寸为 的两个width = 1000 pixels图,height = 650 pixels很明显,一个图(7 个条)与另一个图(2 个条)的条形宽度和条形之间的间距都不同。
如何设置图的高度和宽度(以像素为单位)以及条形的宽度和条形之间的间距(以像素为单位)的绝对值 - 无论图中的条形数量如何?
我有两个想要加入的数据框架。虽然我总是有一个主要的共同列可供加入,但有时除了主列之外,我可能还想在数据中加入另一列。
我如何指定一个可能的列来加入?
我用来自 的两个数据集演示了我的问题mtcars。两者都有一个我始终会加入的“主”列 ( cars),有时some_letters在一个或两个数据集中可能还有另一个共同列 ( )。
library(tidyverse)
create_df <- function(columns_to_include) {
mtcars %>%
rownames_to_column("cars") %>%
select(cars, {{ columns_to_include }}) %>%
slice_sample(n = 15) %>%
{if (sample(c(TRUE, FALSE), size = 1)) add_column(., some_letters = letters[1:15]) else .}
}
# both dataframes have "some_letters"
set.seed(123)
df_a1 <- create_df(carb)
df_a2 <- create_df(gear)
scenario_a <- inner_join(df_a1, df_a2, by = c("cars", "some_letters"))
scenario_a
#> cars carb some_letters gear
#> 1 Ford …Run Code Online (Sandbox Code Playgroud) 为了简化数据整理,我编写了一个由处理数据的几个“动词函数”组成的包装函数。每个人对数据执行一项任务。但是,并非所有任务都适用于通过此过程的所有数据集,有时,对于某些数据,我可能想关闭一些“动词功能”,并跳过它们。
我试图了解是否有一种传统/规范的方式来在 R 的包装器函数中构建这样的工作流。重要的是,一种高效的方式,无论是性能方面还是简洁的代码。
作为数据整理的一部分,我想执行几个步骤:
janitor::clean_names())TRUE和FALSE被替换为1和0(使用gsub())。tolower())。id列旋转更宽(使用tidyr::pivot_wider)NA值的行(使用dplyr::drop_na())玩具数据
library(stringi)
library(tidyr)
set.seed(2021)
# simulate data
df <-
data.frame(id = 1:20,
isMale = rep(c("true", "false"), times = 10),
WEIGHT = sample(50:100, 20),
hash_Numb = stri_rand_strings(20, 5)) %>%
cbind(., score = sample(200:800, size = 20))
# sprinkle NAs randomly
df[c("isMale", "WEIGHT", "hash_Numb", "score")] …Run Code Online (Sandbox Code Playgroud) 下面的问题在编程中似乎非常基本data.table,所以如果它是重复的,我很抱歉。我花了时间研究但找不到答案。
我想创建一个“用户定义的函数”来包装data.table争论过程。在此过程中,创建了一个新列,我想让用户设置该新列的名称。
考虑以下按原样工作的代码。我想将它包装在一个函数中。
library(data.table)
library(magrittr)
library(tibble)
mtcars %>%
as.data.table() %>%
.[, .(max_mpg = max(mpg)), by = cyl] %>%
as_tibble()
#> # A tibble: 3 x 2
#> cyl max_mpg
#> <dbl> <dbl>
#> 1 6 21.4
#> 2 4 33.9
#> 3 8 19.2
Run Code Online (Sandbox Code Playgroud)
由reprex 包于 2021 年 10 月 13 日创建(v0.3.0)
我希望我的函数做的就是让用户设置以下名称new_colname_of_choice:
my_wrapper <- function(new_colname_of_choice) {
mtcars %>%
as.data.table() %>%
.[, .(new_colname_of_choice = max(mpg)), by = cyl] %>%
as_tibble()
}
my_wrapper(new_colname_of_choice …Run Code Online (Sandbox Code Playgroud) 我有一个tibble,其中包含一个列表列,其中包含向量。我想创建一个新列来说明每个向量的长度。由于这个数据集很大(3M 行),我想使用该包来减少一些处理时间furrr。不过,看起来purrr比 更快furrr。怎么会?
为了演示这个问题,我首先模拟一些数据。不要费心去理解模拟部分的代码,因为它与问题无关。
数据模拟功能
library(stringi)
library(rrapply)
library(tibble)
simulate_data <- function(nrows) {
split_func <- function(x, n) {
unname(split(x, rep_len(1:n, length(x))))
}
randomly_subset_vec <- function(x) {
sample(x, sample(length(x), 1))
}
tibble::tibble(
col_a = rrapply(object = split_func(
x = setNames(1:(nrows * 5),
stringi::stri_rand_strings(nrows * 5,
2)),
n = nrows
),
f = randomly_subset_vec),
col_b = runif(nrows)
)
}
Run Code Online (Sandbox Code Playgroud)
模拟数据
set.seed(2021)
my_data <- simulate_data(3e6) # takes about 1 minute to run on my …Run Code Online (Sandbox Code Playgroud) 我有以下数据结构:
library(tibble)
my_tbl <-
tibble::tribble(
~col_x, ~col_y,
"a", list(1, 2, 3),
"b", list(4, 5, 6),
"c", list(7, 8, 9)
)
Run Code Online (Sandbox Code Playgroud)
我想用它来tidyr::unnest_wider()分隔col_y列。这些新列的名称应取自animal_names向量:
animal_names <- c("dog", "cat", "zebra")
Run Code Online (Sandbox Code Playgroud)
我如何利用unnest_wider()应用来自 的名称animal_names,从而避免以下命名警告:
library(tidyr)
my_tbl %>%
unnest_wider(col_y)
#> New names:
#> * `` -> ...1
#> * `` -> ...2
#> * `` -> ...3
#> New names:
#> * `` -> ...1
#> * `` -> ...2
#> * `` -> ...3
#> New …Run Code Online (Sandbox Code Playgroud) 正如我们从这个答案anyNA()中了解到的那样,当使用overany(is.na())来检测向量是否至少有一个元素时,性能会得到显着提高NA。这是有道理的,因为 的算法在找到anyNA()第一个值后停止,而必须首先运行整个向量。NAany(is.na())is.na()
相比之下,我想知道一个向量是否至少有 1 个非值NA。这意味着我正在寻找一种在第一次遇到非值后停止的实现NA。是的,我可以使用,但随后我面临着首先运行整个向量的any(!is.na())问题。is.na()
是否存在与 等效的相反性能anyNA(),即“anyNonNA()”?
我正在寻找一种方法来创建ggplot()具有“尖”边缘的线条,以获得“牙签”的整体外观。
例如,考虑以下可视化:
library(tibble)
library(ggplot2)
my_df <-
tribble(~name, ~value,
"a", 1,
"a", 2,
"b", 1,
"b", 2)
my_df %>%
ggplot(aes(x = name, y = value)) +
geom_line(size = 1.5, lineend = "round") +
expand_limits(y = c(0.5, 2.5)) +
theme_bw()
Run Code Online (Sandbox Code Playgroud)

由reprex 包( v2.0.0 )于 2021 年 7 月 21 日创建
现在,假设我设置了
y_top <- 1.75
y_bottom <- 1.25
Run Code Online (Sandbox Code Playgroud)
虽然也有淡出效果是理想的,但“牙签”外观对我来说是最重要的。不幸的是,geom_lines()的lineend论点不支持我正在寻找的“尖锐性”。
知道如何实现这一目标吗?
谢谢!
我想用来ggplot画一个圆,然后在里面散点。我有代码(从这个答案中采用)让我非常接近我想要的。但是,我希望点随机散布在圆圈内,但现在我在中心周围出现了一个不需要的簇。
我看到了一个类似的 SO question and answer,但它是在 c# 中,我不明白如何使其适应R代码。
下面的代码定义了一个自定义的可视化函数vis_points_inside_circle(),然后调用了4次,给出了4个使用我当前方法可视化的例子。
library(ggplot2)
library(ggforce)
## set up function
vis_points_inside_circle <- function(n) {
# part 1 -- set up empty circle
df_empty_circle <-
data.frame(x = 0,
y = 0,
r = 1)
p_empty_circle <-
ggplot(df_empty_circle) +
geom_circle(aes(x0 = x, y0 = y, r = r)) +
coord_fixed() +
theme_void()
# part 2 -- set up points scatter
r <- runif(n)
th …Run Code Online (Sandbox Code Playgroud)