搜索数据集的值 - 如果存在输出值到列

时间:2015-07-03 19:14:58

标签: r rstudio

我对R来说相对较新,参加了一些课程等等。但是,我试图做一些真正让我困扰的事情,我似乎无法找到答案尽管它是一项似乎微不足道的任务,并且可能已经做过无数次。所以我有一个数据集,在该数据集中是一个字段" Name"包含,去图,名字。但是,该字段包括其名称中的人员标题,例如先生,夫人,小姐等。我要做的是创建一个新专栏" Title" (我已经制作了这个专栏)并让该专栏包含数字形式的标题,例如Mr. = 1,Mrs。= 2,Miss = 3等。我发现的解决方案建议新的数据的子集,但我真的不希望这样,我想在当前数据集中添加一个包含此信息的新列。我意识到这对于那些经历过R的人来说听起来似乎是一项微不足道的任务,但它却让我感到疯狂。感谢您提供任何帮助。

预期产出:

Name                    Title
Jones, Mr. Frank        1
Jennings, Mrs. Joan     2
Hinker, Miss. Lisa      3
Brant, Mrs. Jane        2
Allin, Mr. Hank         1
Minks, Mr. Jeff         1
Naps, Mr. Tim           1

1 个答案:

答案 0 :(得分:2)

我们可以使用gsub从“名称”列中提取Mr/Mrs/Miss子字符串,通过将factor指定为levels元素来转换unique在向量中,最后转换为numeric类。

使用gsub,我们匹配字符串^开头的特定模式,即匹配所有不是,[^,]+)的字符,后跟{ {1}}并且零个或多个空格(,)或(\\s*)与字符|.)匹配,后跟不是{{1}的字符}(\\.)直到字符串的末尾(.)并将其替换为[^.]+$之后的第二个参数)。

''

注意:我们还可以在,中指定订单,即 v1 <- gsub('^[^,]+,\\s*|\\.[^.]+$', '', df1$Name) df1$Title <- as.numeric(factor(v1, levels=unique(v1))) 。在提供的示例中,levels给出了与预期输出中正确的顺序。

或者,我们factor(v1, levels= c('Mr', 'Mrs', 'Miss')) unique可以使用该向量中的match元素。

vector

数据

unique