当前位置: 首页 > 知识库问答 >
问题:

R中使用tidyverse的相关因子和重排序因子

阙繁
2023-03-14

我想在我的数据框中使用函数 relevel() 和 reorder()。我了解 relevel 的工作原理,但我不明白为什么我没有看到 data.frame 中级别的变化。例如,假设我有虹膜数据集

library(tidyverse)

head(iris)
#>   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> 1          5.1         3.5          1.4         0.2  setosa
#> 2          4.9         3.0          1.4         0.2  setosa
#> 3          4.7         3.2          1.3         0.2  setosa
#> 4          4.6         3.1          1.5         0.2  setosa
#> 5          5.0         3.6          1.4         0.2  setosa
#> 6          5.4         3.9          1.7         0.4  setosa


iris$Species <- factor(iris$Species, levels = c("versicolor","setosa","virginica"), 
                       labels = c("versicolor","setosa","virginica"))

由reprex软件包(v2.0.1)于2022年4月12日创建

我可以使用此函数更改级别的顺序,或者在dplyr中使用此函数:

iris %>% 
  mutate(Species=factor(Species)) %>% 
  mutate(Species=fct_relevel(Species,c("versicolor","setosa","virginica"))) %>% 
  head()
#>   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> 1          5.1         3.5          1.4         0.2  setosa
#> 2          4.9         3.0          1.4         0.2  setosa
#> 3          4.7         3.2          1.3         0.2  setosa
#> 4          4.6         3.1          1.5         0.2  setosa
#> 5          5.0         3.6          1.4         0.2  setosa
#> 6          5.4         3.9          1.7         0.4  setosa

由reprex软件包(v2.0.1)于2022-04-12年创建。我没有看到的是,虽然我看到了数据集中级别的变化,但当我调用数据集时,我看不到顺序的变化,这对我来说至关重要。这是我看到的

Species
setosa
...
versicolor
...
virginica
...

这就是我想看到的

Species
versicolor
...
setosa
...
virginica
...

任何帮助,实际上改变与tidyverse的订单表示感谢。

共有1个答案

孟振
2023-03-14

我们需要重新赋值,以便在原始数据中进行更改。除了更改< code >级别的顺序之外,如果还需要更改行的顺序,我们可能需要< code >排列数据

iris <- iris %>% 
  mutate(Species=factor(Species)) %>% 
  mutate(Species=fct_relevel(Species,c("versicolor","setosa","virginica"))) %>%
 arrange(Species)

或者可以使用赋值运算符 (%

library(magrittr)
iris %<>% 
  mutate(Species=factor(Species)) %<>% 
  mutate(Species=fct_relevel(Species,c("versicolor","setosa","virginica")))%>%
  arrange(Species)

检查< code >液位

levels(iris$Species)
[1] "versicolor" "setosa"     "virginica" 
 类似资料:
  • 我觉得我应该能在聚合函数上做到这一点,但我不知道如何告诉它,看一个变量的计数和。我知道我有点不知所措,但有人能帮我解决这个问题吗?

  • 主要内容:在数据帧中的因子,改变级别顺序,产生因子级别因子是用于对数据进行分类并将其存储为级别的数据对象。它们可以存储字符串和整数。 它们在具有有限数量的唯一值的列中很有用。 像“男”,“女”,“真”,“假”等。它们在统计建模的数据分析中很有用。 因子可通过函数使用向量作为输入来创建。 示例 当我们执行上述代码时,会产生以下结果 - 在数据帧中的因子 在使用一列文本数据创建数据帧时,R将文本列视为分类数据并在其上创建因子。参考以下示例代码 - 当我们

  • 我有一个包含四个变量的数据帧(df),其中两个变量是因子,var1和var2。var1和var2各有三个电平。 数据帧中不存在var1和var2的某些组合,例如var1级别“慢速”没有var2级别“4或5”。 我发现在最好的情况下添加行是很棘手的,并且不知道如何实现这一点。任何帮助都将不胜感激!

  • 这就是Euler项目的问题3。对于那些不知道的人,我必须找出最大的素因子600851475143。我有以下代码: 但是,当我用比600851475143小(很多)的东西测试程序时,比如100000000,那么程序需要时间——事实上,100000000到目前为止已经花了20分钟,而且还在继续。很明显,我在这里的做法是错误的(是的,这个程序确实有效,我用较小的数字进行了尝试)。有人能提出一种不那么详尽

  • 问题内容: 即使它有性能问题,我是否也可以知道相关子查询的用途? 问题答案: 好吧,首先它没有性能问题。就是这样,鉴于硬件和数据库结构的性能限制,它将尽可能地执行。 至于它的作用,它只是表达特定逻辑条件的一种方式。

  • 正整数n的因子是从n到1的所有值的乘积。例如,3的阶乘是(3 * 2 * 1 = 6)。 算法 (Algorithm) 这个程序的算法很简单 - START Step 1 → Take integer variable A Step 2 → Assign value to the variable Step 3 → From value A upto 1 multiply eac