r - 如何根据另一列的部分字符串创建新列
问题描述
我有一个包含数千个项目代码向量的数据框,每个代码代表不同类型的研究。这是一个例子:
Data <- data.frame(Assignment = c("C-209", "B-543", "G-01", "LOG"))
作业代码的第一个字母表示研究类型。C = 制图,B = 生物学,G = 地质学,LOG = 物流。
我想创建一个新列,查看 Assignment 列的第一个字母,并用它来表示它的研究类型。
我已经尝试过类似于这个线程的东西,但我知道我错过了一些东西:
Data <- data.frame(Assignment = c("C-209", "B-543", "G-01", "LOG"))
Types <- data.frame(Type = c("Cartography", "Biology", "Geology","Logistic"),
stringsAsFactors = FALSE)
Data %>%
mutate(Type = str_match(Assignment, Types$Type)[1,])
解决方案
您可以在 Types data.frame 中添加新列 Code,然后将其与原始表连接。您还需要在 Data data.frame 中创建一个 Code 列。
library(dplyr)
library(stringr)
Data <- data.frame(Assignment = c("C-209", "B-543", "G-01", "LOG"))
Types <- data.frame(Type = c("Cartography", "Biology", "Geology","Logistic"),
Code = c("C","B","G","L"), # Create new column here
stringsAsFactors = FALSE)
Data <- Data %>% mutate(Code = substr(Assignment,1L,1L)) # extract first character
Data <- left_join(Data, Types, by = "Code") %>% select(Assignment, Type) # combine
推荐阅读
- css - 预加载密钥请求 - 改进 css 调用
- c++ - 查找数组中第一次出现偶数的索引,运行时间成本为 O(log(n))
- javascript - 删除图例 ChartsJS 2.8.0
- c++ - 编译时初始化一个非常量变量
- apache-spark - 将 txt 文件读取为 PySpark 数据框
- java - Spring Boot Jar 执行失败 - 访问被拒绝(用户是匿名的);重定向到身份验证入口点
- php - 具有多对多关系的 Dcotrine QueryBuilder
- angular - Razorpay 自定义函数未在支付失败函数角度中调用
- ruby-on-rails - 使用 Rails 时如何有多个 Tailwind CSS 输出?
- javafx - 为什么只创建一个 TextField 会改变 javafx 中场景的背景?