如何在R中查找和替换数据帧的String列值

时间:2019-03-19 04:06:56

标签: r string dataframe

在R中,我在数据框中有一个包含城市名称的列。如下图所示。

enter image description here

其中包含一些错误的数据,例如,数据N,Z,X需要替换为“其他”,而某些城市代码则需要替换为其原始名称

OC, Okl City --> Oklahoma City
LA --> Los Angles
NW --> New York

当我尝试通过在FOR循环中使用IF和ELSE IF语句来执行此操作时。我非常失败。

如果有人可以帮助我,这将有很大帮助。

谢谢。

3 个答案:

答案 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))