如果模式的值为真,则更新字段
Update a field if the value of a pattern is true
这是我的第一个问题,所以请原谅错误。
我有一个数据框,其中地址在一行中并且有很多缺失值和几个错误。
地址
- Braemor Drive,克朗塔夫,Co.Dublin
- 邓德拉姆梅多大道
- 马里诺菲利普斯堡大道
- 海岸默特尔广场
我想添加一个新字段 "District",如果地址的值包含某些值,例如如果它包含 Marino、Fairview 或 Clontarf,则 District 应该是 Dublin 3。
Dublin3 <- c("Marino", "Fairview", "Clontarf")
matches <- unique (grep(paste(Dublin3,collapse="|"),
DubPPReg$Address, value=TRUE))
如何使用 R 更新匹配为真的 District 的值?
# I've created example data frame with column Adress
df <- data.frame(Adress = c("Braemor Drive",
"Clontarf",
"Co.Dublin",
"Meadow Avenue",
"Dundrum",
"Philipsburgh Avenue",
"Marino",
"Myrtle Square", "The Coast"))
# And vector Dublin
Dublin3 <- c("Marino", "Fairview", "Clontarf")
# Match names in column Adress and vector Dublin 3
df$District <- ifelse(df$Adress %in% Dublin3, "Dublin 3",FALSE)
df
Adress District
1 Braemor Drive FALSE
2 Clontarf Dublin 3
3 Co.Dublin FALSE
4 Meadow Avenue FALSE
5 Dundrum FALSE
6 Philipsburgh Avenue FALSE
7 Marino Dublin 3
8 Myrtle Square FALSE
9 The Coast FALSE
您可以选择其他选项而不是 FALSE
(例如 NA
)。
已编辑: 如果您的数据在向量中
df <- c("Braemor Drive, Churchtown, Co.Dublin",
"Meadow Avenue, Clontarf, Dublin 14",
"Sallymount Avenue, Ranelagh", "Philipsburgh Avenue, Marino")
看起来像这样
df
[1] "Braemor Drive, Churchtown, Co.Dublin"
[2] "Meadow Avenue, Clontarf, Dublin 14"
[3] "Sallymount Avenue, Ranelagh"
[4] "Philipsburgh Avenue, Marino"
您可以像这样使用grepl
找到您的机器
match <- ifelse(grepl("Marino|Fairview|Clontarf", df, ignore.case = T), "Dublin 3",FALSE)
输出为
[1] "FALSE" "Dublin 3" "FALSE" "Dublin 3"
这意味着您要查找的一个或所有匹配名称(即 Marino、Fairview 或 Clontarf)位于 df
的第二行和第四行。
这是我的第一个问题,所以请原谅错误。 我有一个数据框,其中地址在一行中并且有很多缺失值和几个错误。
地址
- Braemor Drive,克朗塔夫,Co.Dublin
- 邓德拉姆梅多大道
- 马里诺菲利普斯堡大道
- 海岸默特尔广场
我想添加一个新字段 "District",如果地址的值包含某些值,例如如果它包含 Marino、Fairview 或 Clontarf,则 District 应该是 Dublin 3。
Dublin3 <- c("Marino", "Fairview", "Clontarf")
matches <- unique (grep(paste(Dublin3,collapse="|"),
DubPPReg$Address, value=TRUE))
如何使用 R 更新匹配为真的 District 的值?
# I've created example data frame with column Adress
df <- data.frame(Adress = c("Braemor Drive",
"Clontarf",
"Co.Dublin",
"Meadow Avenue",
"Dundrum",
"Philipsburgh Avenue",
"Marino",
"Myrtle Square", "The Coast"))
# And vector Dublin
Dublin3 <- c("Marino", "Fairview", "Clontarf")
# Match names in column Adress and vector Dublin 3
df$District <- ifelse(df$Adress %in% Dublin3, "Dublin 3",FALSE)
df
Adress District
1 Braemor Drive FALSE
2 Clontarf Dublin 3
3 Co.Dublin FALSE
4 Meadow Avenue FALSE
5 Dundrum FALSE
6 Philipsburgh Avenue FALSE
7 Marino Dublin 3
8 Myrtle Square FALSE
9 The Coast FALSE
您可以选择其他选项而不是 FALSE
(例如 NA
)。
已编辑: 如果您的数据在向量中
df <- c("Braemor Drive, Churchtown, Co.Dublin",
"Meadow Avenue, Clontarf, Dublin 14",
"Sallymount Avenue, Ranelagh", "Philipsburgh Avenue, Marino")
看起来像这样
df
[1] "Braemor Drive, Churchtown, Co.Dublin"
[2] "Meadow Avenue, Clontarf, Dublin 14"
[3] "Sallymount Avenue, Ranelagh"
[4] "Philipsburgh Avenue, Marino"
您可以像这样使用grepl
找到您的机器
match <- ifelse(grepl("Marino|Fairview|Clontarf", df, ignore.case = T), "Dublin 3",FALSE)
输出为
[1] "FALSE" "Dublin 3" "FALSE" "Dublin 3"
这意味着您要查找的一个或所有匹配名称(即 Marino、Fairview 或 Clontarf)位于 df
的第二行和第四行。