我有以下数据框:
library(tidyverse)
dat <- tribble(
~Scenario, ~V1, ~V2, ~V3, ~V4,
1, 0.97, 0.46, 0.79, 0.25,
1, 0.21, 0.45, 0.23, 0.63,
1, 0.95, 0.97, 0.07, 0.61,
1, 0.93, 0.79, 0.23, 0.86,
2, 0.22, 0.01, 0.42, 0.47,
2, 0.71, 0.17, 0.16, 0.88,
3, 0.73, 0.38, 0.10, 0.77,
3, 0.49, 0.37, 0.90, 0.52,
3, 0.99, 0.71, 0.66, 0.05,
3, 0.72, 0.75, 0.69, 0.01,
3, 0.15, 0.87, 0.12, 0.02,
4, 0.94, 0.30, 0.91, 0.99)
Run Code Online (Sandbox Code Playgroud)
我向该数据添加四个新列,其中每个新列代表按以下分组的每个 V1:V4 列的总和Scenario:
dat_new <- dat %>%
group_by(Scenario) …Run Code Online (Sandbox Code Playgroud) 我指的是这个问题(在水平条形图中自动调整边距).我会在那里问我的问题,但似乎,我还没有这样做的许可.
想象一下水平的条形图(就像在链接的问题中一样),你可能会像我们在社会科学中一样拥有极长的标签(例如,一个调查项目的问题措辞,例如"我感觉不足以解决R中的问题" ).
用户thelatemail提供了一个解决方案,如何根据标签的文本长度移动绘图的开头.这适用于长度为10或15个字符的标签,但如果必须用非常长的标签标记y轴,则无法无限移动绘图的开头.
因此,在特定数量的单词/字符之后包装文本标签更合适,例如,在我的示例中,您可能希望将其包装为:
"I don't feel competent enough
to solve problems in R"
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何在R中包装文本标签,以及如何将包装考虑在内以自动移动绘图的开头.例如,如果我有一个50个字符的标签,并且我将它包装成2行,每行25个字符,那么如果thelatemail的解决方案将考虑到这一点,那将是很好的.
我对这个问题有任何帮助!谢谢!
我正在寻找一种动态方法来指定一些“条件参数”,然后将其提供给case_when操作或其他更适合该问题的方法。
我的目标是将条件的规范与 case_when 调用分开,例如,以便用户只需在文本文件或 R 中的列表中键入条件,然后我将获取该信息并将其提供给 case_when (或任何其他功能(如果更合适)。
假设我想在以下数据中创建一个重新编码的附加变量x,我可以这样做:
df <- data.frame(x = 1:10)
df |>
mutate(x2 = case_when(x < 4 ~ 1,
x >= 4 & x <=7 ~ 2,
TRUE ~ 3))
Run Code Online (Sandbox Code Playgroud)
现在,我想要实现的是使该代码变得灵活,我可以在外部指定 case_when 条件,然后进行重新编码。
例如,它可能看起来像:
all_conditions <- list(1 = "x < 2",
2 = "x >= 2 & x < 5",
3 = "x >= 5 & x < 9",
4 = "TRUE")
Run Code Online (Sandbox Code Playgroud)
然后我可以做一些事情:
df |>
mutate(x2 = do(case_when, all_conditions))
Run Code Online (Sandbox Code Playgroud)
虽然该示例显示了 @Mael 解决方案适用的数字类型变量,但该解决方案也应适用于条件可能类似于 …
我有以下数据:
dat <- data.frame(x = c("this is my example text", "and here is my other text example", "my other text is short"),
some_other_cols = c(1, 2, 2))
Run Code Online (Sandbox Code Playgroud)
此外,我有以下模式向量:
my_patterns <- c("my example", "is my", "my other text")
Run Code Online (Sandbox Code Playgroud)
我想实现的是,以消除任何文本my_patterns发生在dat$x。
我尝试了下面的解决方案,但问题是,一旦我从文本中删除第一个模式(此处:“我的示例”),我的解决方案就无法检测到第二个模式的出现(此处:“是我的”) ) 或第三种模式了。
错误的解决方法:
library(tidyverse)
my_patterns_c <- str_c(my_patterns, collapse = "|")
dat_new <- dat %>%
mutate(short_x = str_replace_all(x, pattern = my_patterns_c, replacement = ""))
Run Code Online (Sandbox Code Playgroud)
我想我可以做某事。就像遍历所有模式一样,收集 dat$x 中与我的模式匹配的字符串位置,然后将它们组合成一个范围并从文本中删除该范围。例如,我将列添加到我dat喜欢的数据帧start_pattern_1和end_pattern_1等。因此,对于第一行 1,我得到第一个模式的 9(开始)和 18(结束),第二个模式的 6/10。然后我需要检查是否有任何end …
假设我创建了一个数据帧(只是为了保持简单):
testframe <- data.frame( a = c(1,2,3,4), b = c(5,6,7,8))
Run Code Online (Sandbox Code Playgroud)
因此,我有两个变量(列)和四个案例(行).
如果我选择一些BEGINNING WITH FIRST行的行,我会得到某种数据帧的子集,例如:
testframe2 <- testframe[1:2,] #selecting the first two rows
Run Code Online (Sandbox Code Playgroud)
但是,如果我对第一行不开始的行做同样的事情,我会得到另一列包含原始数据帧的行号.
testframe3 <- testframe[3:4,] #selecting the last two rows
Run Code Online (Sandbox Code Playgroud)
导致:
a b
3 3 7
4 4 8
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能首先阻止新的row.names变量?我知道我之后可以删除它但也许从一开始就可以避免它.
谢谢你的帮助!
我是一名经常使用 R 的数据分析师。因此,我的大部分输出都是 .html 文件的形式(Rmarkdown、传单地图、plotly、d3.js、flexdashboard...等)。
在任何 Microsoft 应用程序中与同事共享这些文件的最简单/最顺畅的方式是什么?
例如,假设我制作了以下传单地图,我想与工作中的某人分享:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css"/>
<script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
</head>
<body>
<div id="map"></div>
<style>#map { height: 200px; }</style>
<script language="javascript" type="text/javascript">
var center = [-33.8650, 151.2094];
var map = L.map('map').setView(center, 3);
L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {maxZoom: 18}).addTo(map);
L.marker(center).addTo(map);
</script>
</body>
</html>Run Code Online (Sandbox Code Playgroud)
我似乎无法在 Microsoft 生态系统(Teams、Sharepoint、Onedrive、Power BI...等)中找到可以轻松显示此文件内容的任何地方。例如,如果我将文件上传到 Teams、Sharepoint 或 Onedrive,这些应用程序中的任何一个都无法预览文件的内容。下图是我在 Teams、Sharepoint 或 Onedrive 中打开它时发生的情况:
因此,您必须将每个文件下载到本地并在浏览器中打开。这不是一个理想的解决方案。我也无法在线托管这些数据,因为数据是私有的。为了轻松与同事共享,放置这些文件的最佳位置在哪里?
我想获得 tidyverse 中多个变量的相关矩阵。但是,我想按另一列进行分组。例如,假设我有一个df包含列的数据框,我想按年份year查看V1、V2、之间的相关性。V3
year V1 V2 V3 misc_var
2018 5 6 5 a
2018 4 6 4 b
2018 3 2 3 NA
2013 5 8 2 4
2013 6 3 8 8
2013 4 7 5 NA
Run Code Online (Sandbox Code Playgroud)
我尝试过某事。沿着
cor_output = df %>%
group_by(year) %>%
select(V1, V2, V3, year) %>%
cor(use = "pairwise.complete.obs")
Run Code Online (Sandbox Code Playgroud)
但是,它不是计算每年从 V1 到 V3 的相关性,而是只是将year变量添加到相关性中。
所需的输出应该如下所示(请注意输出中的相关性是组成的)
year var V1 V2 V3
2013 V1 1 0.7 0.3 …Run Code Online (Sandbox Code Playgroud) 我有数据,我想使用 tidyverse 方法获取多列的一堆汇总统计信息。但是,利用 tidyverse 的summarize功能,它会将每个列统计信息创建为一个新列,而我更愿意将列名称视为行,将每个统计信息视为一个新列。所以我的问题是:
是否有比将summarize函数与 apivot_longer和一起使用更优雅(我知道“优雅”是一个模糊的术语)的方法来实现这一点pivot_wider?
我正在使用 tidyverse 包的最新开发版本,即 dplyr 0.8.99.9003 和 tidyr 1.1.0。因此,如果任何解决方案需要这些包中尚未包含在 CRAN 上的新功能,那也没关系。
library(tidyverse)
dat <- as.data.frame(matrix(1:100, ncol = 5))
dat %>%
summarize(across(everything(), list(mean = mean,
sum = sum))) %>%
pivot_longer(cols = everything(),
names_sep = "_",
names_to = c("variable", "statistic")) %>%
pivot_wider(names_from = "statistic")
Run Code Online (Sandbox Code Playgroud)
预期结果:
# A tibble: 5 x 3
variable mean sum
<chr> <dbl> <dbl>
1 V1 10.5 210
2 V2 30.5 610
3 V3 50.5 …Run Code Online (Sandbox Code Playgroud) 假设有以下数据:
dat <- data.frame(x1 = c(1, 2, 3, 4, 5),
x2 = c(2, 3, 4, 5, 6),
x3 = c(3, 4, 5, 6, 7),
x4 = c(7, 2, 3, 4, 5),
x5 = c(7, 2, 1, 4, 5))
Run Code Online (Sandbox Code Playgroud)
进一步假设以下查找表:
lookup_positions <- data.frame(v1 = c(1,3,5),
v2 = c(1,2,5),
v3 = c(1,3,4),
v4 = c(2,3,5))
Run Code Online (Sandbox Code Playgroud)
现在,我想要做的是:对于 中的每一行,dat我想遍历 中指定的所有组合lookup_positions并计算 中指定的dat列位置的行总和lookup_positions。
所以对于所有行,dat我想计算 的行总和dat[,c(1,3,5)],然后我想计算等等的行总和dat[, c(1,2,5)]。所以我基本上计算了 4 行总和。
我知道如何使用一个循环做到这一点的基础R,我现在也怎么做,在tidyverse方法的一个 …
在 R 中,当我使用 mutate across 时,对于新创建的列,我想删除现有列名称中的一串文本,然后在末尾添加后缀。
\n这是一个例子:
\n数据框:
\nd <- data.frame(alpha_rate=1:3, beta_rate=4:6, gamma_rate=7:9)\n\nd\n alpha_rate beta_rate gamma_rate\n1 1 4 7\n2 2 5 8\n3 3 6 9\n\nmy_function <- function(x) {(x*8)}\n\ncolumns_i_want <- c("alpha_rate", "beta_rate")\n\nd <- d %>% mutate(across(all_of(columns_i_want), my_function, .names = "{col}_new"))\nRun Code Online (Sandbox Code Playgroud)\n数据框现在具有以下列名称:
\n在名称参数中是否有一种方法可以将\xc2\xa0这些新创建的列称为此(即删除速率,然后添加后缀_new):
\n