在数据集中搜索值 - 如果存在输出到值到列
Search Dataset For Value - If Exists Output To Value To Column
我对 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
我们可以使用 gsub
从 'Name' 列中提取 Mr/Mrs/Miss
子字符串,通过将 levels
指定为 [=] 来转换 factor
vector中的17=]个元素,最后转换为numeric
class。
使用gsub
,我们从字符串^
的开头匹配一个特定的模式,即匹配所有不是,
([^,]+
)后面的字符,
和零个或多个白色 space (\s*
) 或 (|
) 匹配字符 .
(\.
) 后跟字符不是 .
([^.]+
) 直到字符串 ($
) 并将其替换为 ''
(,
之后的第二个参数)。
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
个元素。
df1$Title <- match(v1, unique(v1))
df1
# Name Title
#1 Jones, Mr. Frank 1
#2 Jennings, Mrs. Joan 2
#3 Hinker, Miss. Lisa 3
#4 Brant, Mrs. Jane 2
#5 Allin, Mr. Hank 1
#6 Minks, Mr. Jeff 1
#7 Naps, Mr. Tim 1
数据
df1 <- structure(list(Name = c("Jones, Mr. Frank", "Jennings, Mrs. Joan",
"Hinker, Miss. Lisa", "Brant, Mrs. Jane", "Allin, Mr. Hank",
"Minks, Mr. Jeff", "Naps, Mr. Tim")), .Names = "Name", row.names = c(NA,
-7L), class = "data.frame")
我对 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
我们可以使用 gsub
从 'Name' 列中提取 Mr/Mrs/Miss
子字符串,通过将 levels
指定为 [=] 来转换 factor
vector中的17=]个元素,最后转换为numeric
class。
使用gsub
,我们从字符串^
的开头匹配一个特定的模式,即匹配所有不是,
([^,]+
)后面的字符,
和零个或多个白色 space (\s*
) 或 (|
) 匹配字符 .
(\.
) 后跟字符不是 .
([^.]+
) 直到字符串 ($
) 并将其替换为 ''
(,
之后的第二个参数)。
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
个元素。
df1$Title <- match(v1, unique(v1))
df1
# Name Title
#1 Jones, Mr. Frank 1
#2 Jennings, Mrs. Joan 2
#3 Hinker, Miss. Lisa 3
#4 Brant, Mrs. Jane 2
#5 Allin, Mr. Hank 1
#6 Minks, Mr. Jeff 1
#7 Naps, Mr. Tim 1
数据
df1 <- structure(list(Name = c("Jones, Mr. Frank", "Jennings, Mrs. Joan",
"Hinker, Miss. Lisa", "Brant, Mrs. Jane", "Allin, Mr. Hank",
"Minks, Mr. Jeff", "Naps, Mr. Tim")), .Names = "Name", row.names = c(NA,
-7L), class = "data.frame")