右 |如何按自定义顺序排列 df 列的字符向量?

2023-12-27

我有一个如下所示的数据框:

Fruit X Y Z
apple, banana, orange, papaya a f k
banana, orange, grape b g l
orange, banana c h m
grape d i n
banana, grape, orange, apple, papaya e j o

我想在每一行中设置自定义的出现顺序。喜欢:

  1. Apple
  2. Orange
  3. Papaya
  4. Banana
  5. Grape

所以该列看起来像:

Fruit X Y Z
apple, orange, papaya, banana a f k
orange, banana, grape b g l
orange, banana c h m
grape d i n
apple, orange, papaya, banana, grape e j o

我怎样才能做到这一点???我尝试过其他帖子的建议,但它们都是关于排列数据框行,这不是我需要的......

P.S.:有什么办法可以在管道内做到这一点吗?


我们可以做

library(dplyr)
library(stringr)
library(purrr)
df1 <- df1 %>%
   mutate(Fruit = map_chr(strsplit(Fruit, ",\\s*"), 
        ~ toString(.x[order(match(.x,
  c("apple", "orange", "papaya", "banana", "grape")))])))

-output

df1
                                  Fruit X Y Z
1        apple, orange, papaya, banana a f k
2                orange, banana, grape b g l
3                       orange, banana c h m
4                                grape d i n
5 apple, orange, papaya, banana, grape e j o

或者使用separate_longer_delim

library(tidyr)
df1 <- df1 %>%
  mutate(rn = row_number()) %>%
  separate_longer_delim(Fruit, delim = regex(",\\s*")) %>% 
  arrange(rn, factor(Fruit, 
   levels = c("apple", "orange", "papaya", "banana", "grape"))) %>% 
  reframe(Fruit = str_c(Fruit, collapse = ", "),
    .by = c("rn", "X", "Y", "Z")) %>% 
  select(-rn) %>%
  relocate(Fruit, .before = 1)

-output

df1
                                 Fruit X Y Z
1        apple, orange, papaya, banana a f k
2                orange, banana, grape b g l
3                       orange, banana c h m
4                                grape d i n
5 apple, orange, papaya, banana, grape e j o

如果该列是list,我们不需要strsplit, 反而

df1 <- df1 %>%
   mutate(Fruit = map(Fruit, 
  ~ .x[order(match(.x, c("apple", "orange", "papaya", "banana", "grape")))]))

Or with unnest

df1 <- df1 %>% 
  mutate(rn = row_number()) %>% 
  unnest(Fruit) %>% 
  arrange(rn, factor(Fruit, 
   levels = c("apple", "orange", "papaya", "banana", "grape"))) %>% 
  reframe(Fruit = list(Fruit),
    .by = c("rn", "X", "Y", "Z")) %>% 
  select(-rn) %>%
  relocate(Fruit, .before = 1)

-output

df1
# A tibble: 5 × 4
  Fruit     X     Y     Z    
  <list>    <chr> <chr> <chr>
1 <chr [4]> a     f     k    
2 <chr [3]> b     g     l    
3 <chr [2]> c     h     m    
4 <chr [1]> d     i     n    
5 <chr [5]> e     j     o    

data

df1 <- structure(list(Fruit = c("apple, banana, orange, papaya", "banana, orange, grape", 
"orange, banana", "grape", "banana, grape, orange, apple, papaya"
), X = c("a", "b", "c", "d", "e"), Y = c("f", "g", "h", "i", 
"j"), Z = c("k", "l", "m", "n", "o")), class = "data.frame", row.names = c(NA, 
-5L))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

右 |如何按自定义顺序排列 df 列的字符向量? 的相关文章

  • RStudio 在临时目录中从 Rmarkdown 创建 PDF 文件

    我使用 RStudio 和 Rmarkdown 来创建报告 由于某种原因 使用 Knit 按钮会导致它仅在某个临时目录中创建 从命令输出来看 似乎 pandoc 本身被指示这样做 我觉得这很奇怪 usr lib rstudio bin pa
  • 将 data.frame 的列中的值替换为另一个 data.frame 中的值

    我的情况是 我有一个数据框 其中有一列填充了整数 1 到 6 我想用更具描述性的标签替换这些整数 这些标签在另一个充当 键 的数据框中提供 V1 V2 1 1 LABEL1 2 2 LABEL2 3 3 LABEL3 4 4 LABEL4
  • Shiny 中的模态对话框:可以调整宽度但不能调整高度

    在我的 Shiny 应用程序中 我有几个来自闪亮BS 包的模式窗口 我可以像这样调整这些模式窗口的宽度 tags head tags style HTML modal lg width 1200px abs 1 background col
  • 单击并按住 R 中的按钮闪亮?

    我希望能够通过单击 R 闪亮按钮来更改参数的值 所以我需要按钮 一个用于增加值 一个用于减少值 我想在按住按钮的同时保持值以一定的速度减少 增加 通过释放按钮的点击 动作应该停止 到目前为止我还没有找到这个选项actionButtons在
  • 根据值的运行总计创建组

    我的数据在一个变量 Y 上是唯一的 另一个变量 Z 告诉我每个 Y 中有多少人 我的问题是我想从这些 Y 和 Z 创建 45 人的组 我的意思是 每当运行总计Z 达到 45 创建一组 然后代码继续创建下一组 我的数据看起来像这样 ID X
  • profvis() 何时以及为何显示“源不可用”?

    我经常分析 R 代码 并大量使用 profvis 对于某些函数 浏览器窗口的上半部分会显示源代码 有时则不会 我不知道什么时候会出现这种情况 对我来说这似乎是随机的 有谁知道 profvis 何时以及为什么无法在顶部窗口中显示代码 发生这种
  • 如何从 data.frame 中选择行和列的子集

    我有这个 d d Age gt 2 它返回 Age 超过 2 的所有行 但我只想返回几列中的值 例如 d X 和 d Y 而不是全部 无论如何我可以做到这一点吗 Thanks d d Age gt 2 c X Y
  • 在 R 中读取 Stata 13 文件

    有没有办法在 R 中读取 Stata 版本 13 数据集文件 我尝试执行以下操作 gt library foreign gt data read dta TEAdataSTATA dta 但是 我收到一个错误 read dta TEAdat
  • 正则表达式挑选括号之间的一些文本[重复]

    这个问题在这里已经有答案了 可能的重复 提取 R 中所有括号内的信息 正则表达式 https stackoverflow com questions 8613237 extract info inside all parenthesis i
  • udunits2 R 安装:找不到 udunits2.h

    我正在尝试在 R 中安装 udunits2 以满足对ggforce包裹 但是 安装程序在检查 udunits2 时始终失败 我已经尝试过中的说明this https stackoverflow com questions 47059517
  • Dplyr 多重滞后整齐评估?

    我试图在 dplyr 中使用尽可能少的代码来实现多个滞后 同时坚持整洁的评估 以下标准评估 SE 代码有效 if require dplyr install packages dplyr library dplyr a as tibble
  • 仅在具有重复块名称的另一个 Rmarkdown 文档中运行一个 Rmarkdown 文档中的代码

    我正在 Rmarkdown 中编写一系列相互补充的报告 我想将上一份报告的结果纳入我目前正在编写的报告中 我看到其他建议使用的问题purl从 Rmarkdown 文档中提取 R 代码然后运行它 所以我尝试了以下操作 r read previ
  • 使用 SparkR 1.5 从 RStudio 中的 hdfs 读取大文件(纯文本、xml、json、csv)的选项

    我是 Spark 新手 想知道除了下面的选项之外是否还有其他选项可以使用 SparkR 从 RStudio 读取存储在 hdfs 中的数据 或者我是否正确使用它们 数据可以是任何类型 纯文本 csv json xml 或任何包含关系表的数据
  • R 中带有边缘箱线图的直方图

    如何使直方图中的 X 轴与边缘箱线图匹配 data lt rnorm 1000 nf lt layout mat matrix c 1 2 2 1 byrow TRUE height c 1 3 layout show nf par mar
  • 根据共同值对两个数据帧求和

    我有一个看起来像的数据框 day of week count 1 0 3 2 3 1 3 4 1 4 5 1 5 6 3 另一个喜欢 day of week count 1 0 17 2 1 6 3 2 1 4 3 1 5 4 5 6 5
  • 如何制作一连串的ggplots并在它们之间绘制箭头?

    对于一个项目 我需要绘制一些图并在它们之间放置箭头作为序列的指示 我想知道我是否可以用 ggplot 来做到这一点 是否可以使用 ggplot2 绘制一个干净的大箭头并将其添加到最终的多重图中 作为示例 我使用此代码来绘制绘图 librar
  • 通过 RCpp 返回 NA

    新手 RCpp 问题在这里 How can I make a NumericVector returnNA到R 例如 假设我有一个 RCpp 代码 它分配NA到向量的第一个元素 RCpp export NumericVector myFun
  • 绘制带有颜色渐变的geom_segment线? (或者还有另一种方法来强调开始与结束吗?)

    我的数据框中有大量行 100 000 的两组纬度和经度变量 我正在尝试绘制一个连接这两组坐标的图 即 从纬度1 经度1 to 纬度2 经度2 使用 geom segment 使用非常低的 alpha 使线条透明 因为线条太多 我想强调这些线
  • 当在另一行中找到元素逗号分隔时合并行

    您好 我有一个数据框 例如 species family Events groups 1 SP1 A 10 22 G1 2 SP1 B 7 G2 3 SP1 C D 4 5 6 1 3 G3 G4 G5 G6 4 SP2 A 22 10 G
  • DT数据表中的列对齐

    In my shiny我正在使用的应用程序datatable函数来自DT库构建一个表格并希望将列居中对齐 我可以用formatStyle column textAlign center 但它只影响列体而不影响标题 我们必须设置columnD

随机推荐