我对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
答案 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