我正在尝试按组汇总数据集,以使用虚拟列来确定每个组的值是否出现在数据的未分组的最常见值中。
作为示例,让我们flights从 中获取数据nycflights13。
library(dplyr, warn.conflicts = FALSE)
library(nycflights13)
my_flights_raw <-
flights %>%
select(carrier, month, dest)
my_flights_raw
#> # A tibble: 336,776 x 3
#> carrier month dest
#> <chr> <int> <chr>
#> 1 UA 1 IAH
#> 2 UA 1 IAH
#> 3 AA 1 MIA
#> 4 B6 1 BQN
#> 5 DL 1 ATL
#> 6 UA 1 ORD
#> 7 B6 1 FLL
#> 8 EV 1 IAD
#> 9 B6 …Run Code Online (Sandbox Code Playgroud) 我得到了宽格式的数据。每行都与当前表外部的变量有关,以及与该变量相关的可能值。我正在尝试:(1)转为长格式,以及(2)嵌套转置值。
library(tibble)
df_1 <-
tribble(~key, ~values.male, ~values.female, ~values.red, ~values.green, ~value,
"gender", 0.5, 0.5, NA, NA, NA,
"age", NA, NA, NA, NA, "50",
"color", NA, NA, TRUE, FALSE, NA,
"time_of_day", NA, NA, NA, NA, "noon")
## # A tibble: 4 x 6
## key values.male values.female values.red values.green value
## <chr> <dbl> <dbl> <lgl> <lgl> <chr>
## 1 gender 0.5 0.5 NA NA NA
## 2 age NA NA NA NA 50
## 3 color NA NA TRUE FALSE NA …Run Code Online (Sandbox Code Playgroud) 绘制条形图时,我经常向条形图添加标签以表示每个条形图的 y 值。然而,当标准变得太低时,我会遇到麻烦,使标签不可读或丑陋。
library(ggplot2)
df_blood <- data.frame(blood_type = c("O-", "O+", "A-", "A+", "B-", "B+", "AB-", "AB+"),
frequency = c(0.13, 0.35, 0.08, 0.3, 0.02, 0.08, 0.01, 0.02))
ggplot(df_blood, aes(x = blood_type, y = frequency, fill = blood_type)) +
geom_bar(stat = "identity") +
geom_text(aes(label = frequency), color = "blue", vjust = 1, size = 7)
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v0.3.0)于 2021-01-25 创建
。查看 的栏AB-,我们可以看到文本0.01超出了栏的高度(在栏的底部)。在这种情况下,我想将vjustof更改geom_text()为0.
在这里我使用size = 7与上面相同的geom_text() …
这似乎太基本了,无法在搜索中找到,但也许我没有在谷歌上使用正确的搜索词。
我想规范化数字列。当我修改该列时,mutate(across(.., scale))我被[,1]添加到标题中。这是为什么?
library(dplyr, warn.conflicts = FALSE)
mtcars_mpg_only <-
mtcars %>%
as_tibble() %>%
select(mpg)
mtcars_mpg_only %>%
as_tibble() %>%
mutate(across(mpg, scale))
#> # A tibble: 32 x 1
#> mpg[,1]
#> <dbl>
#> 1 0.151
#> 2 0.151
#> 3 0.450
#> 4 0.217
#> 5 -0.231
#> 6 -0.330
#> 7 -0.961
#> 8 0.715
#> 9 0.450
#> 10 -0.148
#> # ... with 22 more rows
Run Code Online (Sandbox Code Playgroud)
但如果我使用不同的函数而不是scale()(例如,log()),则列标题保持原样:
mtcars_mpg_only %>%
as_tibble() …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种快速解决方案,用于随机子集嵌套在列表中的向量。
如果我们模拟以下数据,我们会得到一个列表l,其中包含 300 万个向量,每个向量的长度为 5。但我希望每个向量的长度有所不同。所以我想我应该应用一个随机子集每个向量的函数。问题是,这个方法并没有我希望的那么快。
模拟数据:列表l
library(stringi)
set.seed(123)
vec_n <- 15e6
vec_vals <- 1:vec_n
vec_names <- stringi::stri_rand_strings(vec_n, 5)
my_named_vec <- setNames(vec_vals, vec_names)
split_func <- function(x, n) {
unname(split(x, rep_len(1:n, length(x))))
}
l <- split_func(my_named_vec, n = vec_n / 5)
head(l)
#> [[1]]
#> HmPsw Qk8NP Quo3T 8f0GH nZmjN
#> 1 3000001 6000001 9000001 12000001
#>
#> [[2]]
#> 2WtYS ZaHFl 6YjId jbGuA tAG65
#> 2 3000002 6000002 9000002 12000002
#>
#> [[3]]
#> xSgZ6 jM5Uw ujPOc CTV5F …Run Code Online (Sandbox Code Playgroud) 一个简单的问题,但我已经寻找了解决方案,但到目前为止无济于事。
假设我有一个列表对象,我想提取特定的列表元素并将它们作为数据框列并排输出。如何通过 tidyverse/piping 以简单的方式实现这一点?下面尝试解决。
some_data <-
structure(list(x = c(23.7, 23.41, 23.87, 24.18, 24.15, 24.31,
23.14, 23.72, 24.12, 23.47, 23.59, 23.29, 23.24, 23.5, 23.56,
23.16, 23.62, 23.67, 23.84, 23.69, 23.7, 23.68, 24.2, 23.77,
23.74, 23.64, 24.39, 24.05, 24.51, 23.6, 24.29, 23.31, 23.96,
24.07, 24.37, 23.77, 23.64, 24, 23.68, 24.02, 23.36, 23.54, 23.34,
23.69, 23.79, 23.8, 23.7, 24.45, 23.27, 23.57, 23.02, 24.23,
23.41, 23.6, 24.02, 23.94, 24.06, 23.97, 23.38, 23.46, 24, 23.89,
23.51, 23.72, 23.83, 23.96, 23.84, 23.52, 24.36, 23.94, 23.82, …Run Code Online (Sandbox Code Playgroud) 我正在利用Rscript通过 bash 运行 R 脚本,并且我想指定要传递给脚本本身内的函数的参数。具体来说,我想传递指定的参数:
.csv) 和当列名包含波浪号 ( ~)时,我遇到了问题。我试过用反引号包裹列名,但仍然不成功。
我想编写一个脚本,该脚本以.csv格式接收数据文件,并根据用户的选择为一个变量绘制直方图。
plot_histogram <- function(path_to_input, x_var) {
data_raw <- read.csv(file = path_to_input)
path_to_output_folder <- dirname(path_to_input)
png(filename = paste0(path_to_output_folder, "/", "output_plot.png"))
hist(as.numeric(na.omit(data_raw[[x_var]])), main = "histogram", xlab = "my_var")
replicate(dev.off(), n = 20)
}
Run Code Online (Sandbox Code Playgroud)
set.seed(123)
df <- data.frame(age = sample(20:80, size = 100, replace = TRUE))
write.csv(df, "some_age_data.csv")
plot_histogram(path_to_input = "some_age_data.csv",
x_var = "age")
Run Code Online (Sandbox Code Playgroud)
正如预期的,我得到一个.png与图文件,保存到同一目录中的.csv是

我正在尝试使用一个名为waldo的新 R 包(也参见 tidyverse 博客),该包旨在比较数据对象以查找差异。waldo::compare()根据文档,该函数返回一个对象:
类为“waldo_compare”的字符向量
此函数的主要目的是在控制台中使用,利用着色功能突出显示数据对象之间不相等的突出值。然而,虽然在控制台中检查很有用,但我确实想获取这些值并对其采取行动(从数据中过滤掉它们等)。因此,我想以编程方式提取突出的值。我不知道怎么做
set.seed(2020)
vec_a <- sample(0:20, size = 10)
## [1] 3 15 13 0 16 11 10 12 6 18
Run Code Online (Sandbox Code Playgroud)
4)添加到第 11 个向量元素中。vec_b <- vec_a
vec_b[11] <- 4
vec_b <- as.integer(vec_b)
## [1] 3 15 13 0 16 11 10 12 6 18 4
Run Code Online (Sandbox Code Playgroud)
waldo::compare()测试两个向量之间的差异waldo::compare(vec_a, vec_b)
## `old[8:10]`: 12 6 18
## `new[8:11]`: 12 6 18 4 …Run Code Online (Sandbox Code Playgroud) 我有两个想要加入的数据框架。虽然我总是有一个主要的共同列可供加入,但有时除了主列之外,我可能还想在数据中加入另一列。
我如何指定一个可能的列来加入?
我用来自 的两个数据集演示了我的问题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) 我想计算集合之间的重叠系数。我的数据是一个 2 列表,例如:
\ndf_example <- \n tibble::tribble(~my_group, ~cities,\n "foo", "london",\n "foo", "paris", \n "foo", "rome", \n "foo", "tokyo",\n "foo", "oslo",\n "bar", "paris", \n "bar", "nyc",\n "bar", "rome", \n "bar", "munich",\n "bar", "warsaw",\n "bar", "sf", \n "baz", "milano",\n "baz", "oslo",\n "baz", "sf", \n "baz", "paris")\nRun Code Online (Sandbox Code Playgroud)\n在 中df_example,我有 3 个集合(即 、foo、bar)baz,每个集合的成员在cities。
我希望最终得到一个与所有可能的集合对相交的表,并指定每对中较小集合的大小。这将导致计算重叠系数每对集合的
\n(重叠系数=共同成员数/较小集合的大小)
\n所需输出
\n## # A tibble: 3 \xc3\x97 4\n## combination n_instersected_members size_of_smaller_set …Run Code Online (Sandbox Code Playgroud) r ×10
dplyr ×3
bash ×1
command-line ×1
compare ×1
comparison ×1
geom-text ×1
ggplot2 ×1
ggproto ×1
inner-join ×1
list ×1
merge ×1
performance ×1
rscript ×1
scale ×1
shell ×1
subset ×1
tibble ×1
tidyr ×1
tidyverse ×1