问题标签 [forcats]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
38 浏览

r - 总结到最大的类别

我有时会遇到一个问题。我想折叠我的数据框,并且一列应该返回组中最大的类别,即使每个类别有多个观察值。例子:

预期输出:

请注意,对于第 2 组,我希望返回 cat D,因为 D 的 val 总和大于 cat C 的总和。

这有效:

但我想在没有双重总结的情况下做到这一点:

也许有一个forcats解决方案或什么的?

谢谢!:)

0 投票
0 回答
272 浏览

r - 在 Jupiter 笔记本中使用 Tidyverse 包中的“新”函数时出现问题

我在 Jupiter notebook 中使用一些特定的 R 函数时遇到了一些问题。在我尝试使用“新”函数之前,我所有的 R 代码都运行良好,例如 pivot_longer()(来自 tidyr 包)和 fct_lump_min(来自 forcats 包)。这是我得到的错误:

pivot_longer(., everything(), names_to = "variables", values_to = "num_levels") 中的错误:找不到函数 "pivot_longer" Traceback:

  1. ramen_data_factor %>% summarise_all(nlevels) %>% pivot_longer(everything(), .names_to = "variables", values_to = "num_levels")
  2. withVisible(eval(quote( _fseq( _lhs)), env, env))
  3. 评估(报价(_fseq_lhs)),环境,环境)
  4. 评估(报价(_fseq_lhs)),环境,环境)
  5. _fseq( _lhs)
  6. 减少(值,_function_list
  7. withVisible(function_list[k])
  8. 函数列表[k]

但是,它们的“旧”对应函数,例如gather() 和fct_lump() 可以正常工作!此外,这些 Tidyverse 包中的所有其他功能都可以正常工作(实际上所有库都已正确加载)。由于这是课程的材料,我真的很想使用新功能而不是弃用的功能。每个人都会发生这种情况,还是我应该对我的 Anaconda 发行版设置进行一些调整?

非常感谢!

0 投票
1 回答
112 浏览

r - fct_reorder() 仅在一个方面正常工作

我正在尝试创建一个多面条形图,条形图根据其频率排序(使用 fct_reorder)。这是我的代码:

生成的数据框如下所示:

但是,当我创建一个分面条形图绘制每个方面的字数时(代码如下所示),

该图只为一个方面订购条形图:

在此处输入图像描述

有没有人对为什么会发生这种情况有任何见解?谢谢!

0 投票
1 回答
111 浏览

r - 同时修剪多个变量的因子标签

这是我的玩具数据集:

我想修剪很长的因子标签,它们都有两个共同点:

  1. 都以TrueFalse开头
  2. 包括列名(即每列的因子标签是唯一的)

我想简化这一点,并且每个因子列只有TrueFalse 之类的东西。这是我想要的输出:

我认为它应该与类似mutate_atandfct_relabel和可能的东西一起使用str_trunc,但我无法弄清楚。

0 投票
2 回答
56 浏览

r - 一口气将许多变异变量分解

如果我已经重新编码了 20 个变量,为什么我不能将 mutate() 传递到 as_factor() 中?我没有收到错误,但它只是不做任何调平。

我可以一件一件 df$Ethnicity %<>% as_factor()

但我不能这样做:

我也尝试过 as_factor(.) ,但无济于事。我真的必须手动包装每个 case_when infactor()吗?我有二十个变量,我想避免需要将每个变量写入 purr:: 函数或重复 wrapping factor() 二十次的解决方案。

0 投票
1 回答
221 浏览

r - 根据数据子集的汇总统计重新排序因子

我正在尝试从我的数据框的子集中重新排序一个因子,该因子由另一个使用forcats::fct_reorder().

考虑以下数据框df

我想使用ggridges包绘制多面组密度。例如:

产生这个:

我现在想按每个方面上密度值的fct1中位数(默认为)排序,即 where 。因此,此示例中的目标是分面以 B - C - A 的顺序出现。这似乎与此处的问题非常相似,不同之处在于我不想先汇总数据,因为我需要原始数据绘制密度。fct_reorder()fct2 == "k"

我试图在链接问题的答案中调整代码:

但它返回以下错误:

forcats::fct_reorder(fct1, filter(., fct2 == "k") %>% pull(val)) 中的错误:

长度(f)==长度(.x)不正确

很明显,它们的长度不同,但我不太明白为什么这个错误是必要的。我的猜测是,通常不能保证fct1子集中存在所有级别的 ,这肯定是有问题的。但是,在我的示例中并非如此。有没有办法解决这个错误,或者我做错了什么?

我知道我可以用几行额外的代码来解决这个问题,例如,创建子集数据的辅助变量,重新排序,然后将级别顺序作为我在原始数据集中的因素。我仍然想要一个更漂亮的解决方案,因为我经常面临同样的任务。

0 投票
1 回答
1251 浏览

r - 重命名因子变量的所有级别,有没有一种tidyverse方法呢?

我偶尔需要重命名因子变量的所有级别。我知道如何使用 R 基础来实现这一点,例如:levels(factor_variable) <- levels(new_variable). 但我真的很想有一种方法来使用tidyverse. 我看着,dplyrforcats我没有找到任何解决它的方法。我希望能够做我在示例 1 中实现的目标,但与%>%操作员一起工作。

示例 1,具有 R 基础(有效)

示例 2,我尝试过但不适用于 tidyverse 的一件事

我也尝试重新编码,但它不仅是手动的(一次每个值),而且它也不接受%>%操作员。这是我试图看看发生了什么的一些事情:

0 投票
3 回答
100 浏览

r - fct_collapse 的否定级别

我有一个更小的不应该折叠的级别列表(“阿尔伯塔省”、“不列颠哥伦比亚省”、“安大略省”、“魁北克省”),而不是应该(所有其他)。我无法否定 fct_collapse 的级别(作为目标示例的代码)(除以下之外的所有级别)。有什么建议么?

df$`Province group` %<>% fct_collapse(df$Province, `Smaller provinces` = !c("Alberta", "British Columbia", "Ontario", "Quebec"))

0 投票
1 回答
37 浏览

r - 带有 dplyr 的管道后无法识别的变量

我正在使用gapminder数据集制作带有plotly库的交互式条形图。我想使用forcats库重新排序大陆变量中的级别,但是当我将它放在管道之后时它无法识别这个变量。这是我正在使用的脚本:

我想知道为什么变量“大陆”不通过管道。谢谢。

0 投票
0 回答
424 浏览

r - fct_relevel piping Unknown levels in `f` all of the sudden

I've used this successfully, but on a different dataset I'm getting an error of unknown levels in `f`, even though they are basically the same. What is going on? This one works:

This one will recode but not relevel, throwing the error. I added as.numeric because this variable is as.character in that dataset. That's the only difference.

If I run mutate and fct_relevel separately, it will relevel the way it's supposed to. I've tried %>% fct_relevel("Low", "Medium", "High")), %>% fct_relevel(., "Low", "Medium", "High")), and %>% fct_relevel("High", after = Inf)) without any difference out outcome.