重命名同时满足两个条件的文本

时间:2017-11-22 22:24:50

标签: r

我正在尝试找出一个问题,以便在满足两个条件时替换现有内容。问题是:

以下三个位置是数据中最需要的三个位置:

  • Safeway at 94107 zipcode
  • Whole Foods Market at 94107 zipcode
  • Pizzeria Delfina at 94110 zipcode

我们希望将这些特定地点的交付物确定为热点。 通过重新标记“提取名称”来标记特定邮政编码的每次交付。带有新标签:

  • 添加标签' -H1'邮政编码94107
  • 给每个全食品市场
  • 添加标签' -H2'邮编94107
  • 的每个Safeway
  • 添加标签' -H3'邮编94110
  • 给每个Pizzeria Delfina

例如,pickup_name' Safeway'现在看起来像' Safeway-H2'在每个94107邮政编码。

我使用if函数,但它不起作用,代码是

if(which(problem$pickup_zipcode==94107) & which(problem$pickup_name=="Safeway")){
  problem$pickup_name<-"Safeway-H2"
}

控制台说:

Warning messages:
1: In which(problem$pickup_zipcode == 94107) & which(problem$pickup_name ==  :
  longer object length is not a multiple of shorter object length
2: In if (which(problem$pickup_zipcode == 94107) & which(problem$pickup_name ==  :
  the condition has length > 1 and only the first element will be used

该数据集可通过此Google云端硬盘链接获取。

https://drive.google.com/open?id=1DEdJvAdACVv_Pc5IcgFBSGvDKm_GPrNE

2 个答案:

答案 0 :(得分:2)

无需使用if语句。只需将数据子集化为您想要的数据,并将其设置为等于新值:

styles.scss

答案 1 :(得分:2)

使用dplyr的解决方案。 mutate是创建或更新列的功能。 case_when是一种指定条件和替换的方法。假设您的数据框名为dtdt2是替换后的数据框。

library(dplyr)

dt2 <- dt %>%
  mutate(pickup_name = case_when(
    pickup_name %in% "Whole Foods Market" & pickup_zipcode %in% 94107 ~ paste0(pickup_name, "-H1"),
    pickup_name %in% "Safeway" & pickup_zipcode %in% 94107            ~ paste0(pickup_name, "-H2"),
    pickup_name %in% "Pizzeria Delfina" & pickup_zipcode %in% 94110   ~ paste0(pickup_name, "-H3"),
    TRUE                                                              ~ pickup_name
  ))