代码之家  ›  专栏  ›  技术社区  ›  Jaccar

基于另一列更改列值,但仅限于第一列和第二列(R)中的某些条件

  •  0
  • Jaccar  · 技术社区  · 7 年前

    我有一个数据帧。

    city <- as.character(c("London", "Unknown", "Birmingham", "Bristol", "Unknown", "Unknown", "Unknown", "Unknown"))
    city_details <- as.character(c("London", "Camden", "Birmingham", "Outside London", "Camden Town", "Westminster", "London", "Birmingham"))
    city_data <- data.frame(city, city_details)
    

    因此,我可以替换其中一些:

    city_data$city[grepl("Camden|Westminster", city_data$city_details)] <- 'London'
    

    然而,在城市细节中写“伦敦”的更难,因为也有一个写“伦敦以外”,所以我不想随便挑一个有“伦敦”图案的。

    出于这个目的,我并不是在寻找一种只包含精确匹配的方法(因为这对于我的真实数据不太合适)。

    所以我只想对未知的城市值进行替换。

    city_data <- within(city_data, city[city == "Unknown"] <- (city[grepl("London", city_details)] <- 'London'))
    

    有人能帮忙吗?

    3 回复  |  直到 7 年前
        1
  •  1
  •   annhak    7 年前

    我假设你只想在 city 是未知的 city_details 提到“伦敦”。在这种情况下,您可以使用以下方法:

    city_data$city[(as.numeric(grepl("Unknown", city)) + as.numeric(grepl("London", city_details))) == 2] <- "London"

    这能回答你的问题吗?

        2
  •  0
  •   apitsch    7 年前

    我建议如下:

    one_hot <- grepl("Camden|Westminster|London", city_data$city_details) &
      city_data$city == "Unknown"
    city_data$city[one_hot] <- "London"
    

    city <- as.character(c("London", "Unknown", "Birmingham", "Bristol", "Unknown", "Unknown", "Unknown", "Unknown"))
    city_details <- as.character(c("London", "Camden", "Birmingham", "Outside London", "Camden Town", "Westminster", "London", "Tottenham"))
    city_data <- data.frame(city, city_details)
    
    > city_data
            city   city_details
    1     London         London
    2    Unknown         Camden
    3 Birmingham     Birmingham
    4    Bristol Outside London
    5    Unknown    Camden Town
    6    Unknown    Westminster
    7    Unknown         London
    8    Unknown      Tottenham
    
    > one_hot <- grepl("Camden|Westminster|London", city_data$city_details) &
    +   city_data$city == "Unknown"
    > city_data$city[one_hot] <- "London"
    > city_data
            city   city_details
    1     London         London
    2     London         Camden
    3 Birmingham     Birmingham
    4    Bristol Outside London
    5     London    Camden Town
    6     London    Westminster
    7     London         London
    8    Unknown      Tottenham
    
        3
  •  0
  •   Jaccar    7 年前

    我还想出了下面的方法,这对我来说似乎更整洁、更直观。无需转换为数字。

    city_data$city[grepl("Unknown", city_data$city) & 
                   grepl("London|Camden|Westminster", city_data$city_details)] <- "London"