r - 将包含字符和数字的列分隔为每个类别的两个单独的列

标签 r

<分区>

我想将名为 Demand Per Section 的数据框的第一列分成两个单独的列,分别名为 Units 字符和 Demand 数字值(value)观。

df<-structure(list(`Demand Per Section` = c("80 GM", "125ML", "350 ML", 
"100 GM", "538ML", "75GM", "25GM", "138GM", "138GM", "75GM"), 
    Formula = c("C10H8", "HNO3", "H2SO4", "C7H6O3", "CH3COOCOCH3", 
    "C10H8O", "NaOH", "C6H5NHNH2.HCl", "C6H12O6", "CH3COONa"), 
    `Element Name` = c("Naphthalene", "Nitric acid (concentrated)", 
    "Sulphuric acid(concentrated)", "2-hydroxybenzoic acid", 
    "Acetic anhydride", "2-Naphthol", "Sodium Hydroxide", "Phenyl hydrazine hydrochloride", 
    "Glucose", "Sodium acetate"), `Course Name` = c("Course 1", 
    "Course 1", "Course 1", "Course 1", "Course 1", "Course 1", 
    "Course 1", "Course 1", "Course 1", "Course 1"), Department = c("Chemsitry", 
    "Chemsitry", "Chemsitry", "Chemsitry", "Chemsitry", "Chemsitry", 
    "Chemsitry", "Chemsitry", "Chemsitry", "Chemsitry")), row.names = c(NA, 
-10L), class = c("tbl_df", "tbl", "data.frame"))

library(tidyverse)
df %>%
  mutate(Unit = str_extract(`Demand Per Section`, "[A-Z]?"), 
         Demand = str_extract(`Demand Per Section`, "[0-9]?")) %>%
  select(`Demand Per Section`,Unit,Demand)

最佳答案

由于数字和字母之间的空格不一致,我们可以使用正则表达式环视

library(dplyr)
library(tidyr)
df %>% 
  separate(`Demand Per Section`, into = c("Demand", "Unit"), 
     sep = "(?<=[0-9])(?=\\s?[A-Z])", remove = FALSE) %>% 
  mutate(Unit = trimws(Unit))

关于r - 将包含字符和数字的列分隔为每个类别的两个单独的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71297837/

相关文章:

r - 在由嵌套列表组成的 tibble 中取消嵌套变量

r - 使用预测包从预测中获取预测点估计和间隔

r - 动画将图层添加到 ggplot2 图的过程

r - 在 R 中解码 base64 字符串会产生意外的二进制输出

r - 如何使用 sprintf 打印以 0 开头的十六进制数,使其宽度为 2?

r - 功能:将返回的数据框保存到工作区

r - 估计零通胀模型时如何用 R 获取系数

r - 检查唯一元素

R 列出数据框中的一列

r - 如何查看解析后的 R 函数的内容?