小编des*_*hen的帖子

两组列的平行枢纽_更长

我有以下数据框:

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)

pivot r reshape tidyr

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

R barplot:包装长文本标签?

我指的是这个问题(在水平条形图中自动调整边距).我会在那里问我的问题,但似乎,我还没有这样做的许可.

想象一下水平的条形图(就像在链接的问题中一样),你可能会像我们在社会科学中一样拥有极长的标签(例如,一个调查项目的问题措辞,例如"我感觉不足以解决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的解决方案将考虑到这一点,那将是很好的.

我对这个问题有任何帮助!谢谢!

plot r labels word-wrap bar-chart

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

动态“case_when”允许不同数量的条件和条件本身

我正在寻找一种动态方法来指定一些“条件参数”,然后将其提供给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 解决方案适用的数字类型变量,但该解决方案也应适用于条件可能类似于 …

r tidyverse

8
推荐指数
1
解决办法
1389
查看次数

根据重叠模式删除部分字符串

我有以下数据:

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_1end_pattern_1等。因此,对于第一行 1,我得到第一个模式的 9(开始)和 18(结束),第二个模式的 6/10。然后我需要检查是否有任何end …

regex r stringr

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

R - 从数据框中选择行时如何防止row.names

假设我创建了一个数据帧(只是为了保持简单):

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变量?我知道我之后可以删除它但也许从一开始就可以避免它.

谢谢你的帮助!

row r dataframe

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

在 Microsoft 生态系统中与同事共享 .html 文件的最简单方法是什么?

我是一名经常使用 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 中打开它时发生的情况:

在此输入图像描述

因此,您必须将每个文件下载到本地并在浏览​​器中打开。这不是一个理想的解决方案。我也无法在线托管这些数据,因为数据是私有的。为了轻松与同事共享,放置这些文件的最佳位置在哪里?

html javascript sharepoint microsoft-teams

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

tidyverse - 按其他列分组的多个列之间的相关性

我想获得 tidyverse 中多个变量的相关矩阵。但是,我想按另一列进行分组。例如,假设我有一个df包含列的数据框,我想按年份year查看V1V2、之间的相关性。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)

r correlation tidyverse

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

tidyverse 汇总多列但将结果显示为行

我有数据,我想使用 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)

r dplyr tidyr summarize

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

(tidyverse 方法)计算多列的 rowsum,其中要包含的列信息来自不同的数据框

假设有以下数据:

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 tidyverse

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

如何在 R 中的 mutate(across...) 上指定新突变的名称

在 R 中,当我使用 mutate across 时,对于新创建的列,我想删除现有列名称中的一串文本,然后在末尾添加后缀。

\n

这是一个例子:

\n

数据框:

\n
d <- 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"))\n
Run Code Online (Sandbox Code Playgroud)\n

数据框现在具有以下列名称:

\n
    \n
  • “alpha_rate”、“beta_rate”、“gamma_rate”、“alpha_rate_new”、“beta_rate_new”
  • \n
\n

在名称参数中是否有一种方法可以将\xc2\xa0这些新创建的列称为此(即删除速率,然后添加后缀_new):

\n
    \n
  • “alpha_rate”、“beta_rate”、“gamma_rate”、“alpha_new”、“beta_new” \n\xc2\xa0
  • \n
\n

r dplyr

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