【发布时间】:2019-02-20 11:37:31
【问题描述】:
我正在尝试构建一个 if 函数,如果“zipcode”列中的值以某个数字开头,则该函数允许我使用某个城市名称来改变数据框的“city”列。
例如:如果邮政编码以 1 开头,则将城市列值更改为“NYC”, 否则,如果邮政编码以 6 开头,则将城市列值更改为“芝加哥”, 否则,如果邮政编码以 2 开头,则将城市列值更改为“波士顿”,
等等。
发件人:
city zipcode
NYC 11211
DC 20910
NYC 11104
NA 11106
NA 2008
NA 60614
收件人:
city zipcode
NYC 11211
DC 20910
NYC 11104
NYC 11106
DC 2008
Chicago 60614
这是一种处理 NA 值的方法:if 函数只会为它们已经存在的值重写同一个城市,并键入城市名称以防存在 NA 值
数据框名称data.frame
列名 zipcode 和 city。
它们都是因子类型,对于我的进一步模型必须保持这种类型。
我想直接改变数据框,因为我需要它以供进一步使用。
PS: 写得不好请见谅。我是社区的新人。
提前致谢!
【问题讨论】:
-
请展示一个可重现的小例子和预期的输出
-
你可以用
dplyr的case_when函数来做到这一点:rdocumentation.org/packages/dplyr/versions/0.7.8/topics/… -
@akrun 应该更新
-
我们可以使用
base::substr和dplyr::case_when,library(dplyr);df %>% mutate(zip=substr(zipcode,1,1), city_upd=case_when(zip==1 ~ 'NYC',zip==2 ~ 'DC', zip==6 ~ 'Chicago' ,TRUE ~ NA_character_)) -
@A.Suliman 不幸的是它不起作用。 Dataframe 没有经过任何修改。
标签: r if-statement dplyr tidyverse