首页 > 解决方案 > 合并两列中的字符并创建一个新列

问题描述

我有一个这样的数据框。

name                zip   
Mike Tyson          13756
Mohammed Ali        54412
Joe Frazier         47463
Floyd Mayweahter    34134

我想使用名字和姓氏的第一个字符以及邮政编码的最后两个字符来创建一个新变量

name                zip    new.var
Mike Tyson          13756  MT56
Mohammed Ali        54412  MA12
Joe Frazier         47463  JF63
Floyd Mayweahter    34134  FM34 

我搜索了一个类似的问题,但在这里他们只使用一列从一列中提取字符并创建新变量

标签: r

解决方案


带有正则表达式的基本 R 方式 -

transform(df, new.var = paste0(sub('^(.)\\w+\\s(.).*', '\\1\\2', name), 
                               sub('.*(..)$', '\\1', zip)))

#              name   zip new.var
#1       Mike Tyson 13756    MT56
#2     Mohammed Ali 54412    MA12
#3      Joe Frazier 47463    JF63
#4 Floyd Mayweahter 34134    FM34

第一个从列sub中的两个单词中提取第一个字符,name第二个sub从列中提取最后两个字符zip。我们使用 将它们组合在一列中paste0

数据

如果您以可重现的格式提供数据,则更容易提供帮助

df <- structure(list(name = c("Mike Tyson", "Mohammed Ali", "Joe Frazier", 
"Floyd Mayweahter"), zip = c(13756L, 54412L, 47463L, 34134L)), 
class = "data.frame", row.names = c(NA, -4L))

推荐阅读