在R中,我在数据框中有一个包含城市名称的列。如下图所示。
其中包含一些错误的数据,例如,数据N,Z,X需要替换为“其他”,而某些城市代码则需要替换为其原始名称
OC, Okl City --> Oklahoma City
LA --> Los Angles
NW --> New York
当我尝试通过在FOR循环中使用IF和ELSE IF语句来执行此操作时。我非常失败。
如果有人可以帮助我,这将有很大帮助。
谢谢。
答案 0 :(得分:1)
这是一个使用dplyr::case_when()
的可重现示例,您可以将其推广到任意数量的条件:
library(tidyverse)
d <- tibble(city = c("Oklahoma City","Los Angeles","OC","NY","Z","Z","X","N"))
d <- mutate(d, city = case_when(city %in% c("Z","X","N") ~ "Other",
city == "Oklahoma City" ~ "OKL",
city == "Los Angeles" ~ "LA",
TRUE ~ city))
d
# A tibble: 8 x 1
city
<chr>
1 OKL
2 LA
3 OC
4 NY
5 Other
6 Other
7 Other
8 Other
答案 1 :(得分:0)
利用plyr软件包中的重估值。
library(plyr)
df$city<-revalue(df$city,c("OC"="Oklahoma City",
"Okl City"="Oklahoma City",
"LA"="Los Angles",
"NW"="New York",
"Z"="Others",
"X"="Others",
"N"="Others"))
答案 2 :(得分:0)
使用可以case when
类似于上述答案中的@Rich,但没有区别。
library(tidyverse)
d <- tibble(city = c("Oklahoma City","Los Angeles","OC","NY","Z","Z","X","N"))
d <- mutate(d, city = case_when(!city %in% c("Oklahoma City", "Los Angeles" ) ~ "Other", city == "Oklahoma City" ~ "OKL", city == "Los Angeles" ~ "LA", TRUE ~ city))