首页 > 解决方案 > 如何根据另一列的部分字符串创建新列

问题描述

我有一个包含数千个项目代码向量的数据框,每个代码代表不同类型的研究。这是一个例子:

Data <- data.frame(Assignment = c("C-209", "B-543", "G-01", "LOG"))

作业代码的第一个字母表示研究类型。C = 制图,B = 生物学,G = 地质学,LOG = 物流。

我想创建一个新列,查看 Assignment 列的第一个字母,并用它来表示它的研究类型。

我已经尝试过类似于这个线程的东西,但我知道我错过了一些东西:

R - 根据部分字符串创建新列

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,])

标签: rdplyrstringr

解决方案


您可以在 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

推荐阅读