如果一列中的值以…开头,则用给定文本替换另一列,在R中

如果一列中的值以…开头,则用给定文本替换另一列,在R中,r,if-statement,dplyr,tidyverse,R,If Statement,Dplyr,Tidyverse,我试图构建一个if函数,允许我用特定城市名称对数据帧的“city”列进行更改,如果在“zipcode”列中,值以某个数字开头 例如:如果zipcode以1开头,则将city列值改为“NYC”, 否则,如果zipcode以6开头,则将city列值改为“Chicago”, 否则,如果zipcode以2开头,则将city列值改为“Boston” 等等 发件人: city zipcode NYC 11211 DC 209

我试图构建一个if函数,允许我用特定城市名称对数据帧的“city”列进行更改,如果在“zipcode”列中,值以某个数字开头

例如:如果zipcode以1开头,则将city列值改为“NYC”, 否则,如果zipcode以6开头,则将city列值改为“Chicago”, 否则,如果zipcode以2开头,则将city列值改为“Boston”

等等

发件人:

city              zipcode
NYC               11211
DC                20910
NYC               11104
NA                11106
NA                2008
NA                60614
致:

这是一种处理NA值的方法:if函数只需为已经存在的值重写相同的城市,并键入城市名称,以防有NA值

数据帧名称
data.frame
列名
zipcode
city
。 它们都是因子类型,在我的进一步模型中必须保持这种类型

我想直接改变数据帧,因为我需要它来进一步使用

PS:很抱歉写得不好。我是新来的


提前谢谢

这里有一个可能适合您的解决方案

完整代码:

# load library
library(tidyverse)

# create the sample dataframe
df <- tribble(~city, ~zipcode,
              'NYC',11211,
              'DC',20910,
              'NYC', 11104,
              NA, 11106,
              NA, 2008,
              NA, 60614)

# change the NAs to the appropriate values
df <- df %>%
  mutate(
    city = case_when(
      str_sub(zipcode, 1, 1) == '1' ~ 'NYC',
      str_sub(zipcode, 1, 1) == '2' ~ 'DC',
      str_sub(zipcode, 1, 1) == '6' ~ 'Chicago',
      TRUE ~ city
    )
  )

# convert everything to factors
df <- df %>%
  mutate(
    city = as.factor(city),
    zipcode = as.factor(zipcode)
  )

#preview the output
glimpse(df)
#加载库
图书馆(tidyverse)
#创建示例数据帧

df请显示一个小的可复制示例和预期输出。当
函数时,您可以使用
dplyr
case\u执行此操作:@akrun应该更新我们可以使用
base::substr
dplyr::case\u当
时,
库(dplyr);df%>%变异(zip=substr(zipcode,1,1),city\u upd=case\u当(zip==1~'NYC',zip==2~'DC',zip==6~'Chicago',TRUE~NA\u character\uu))
@A.Suliman不幸的是,它不起作用。Dataframe没有经过任何修改。
# load library
library(tidyverse)

# create the sample dataframe
df <- tribble(~city, ~zipcode,
              'NYC',11211,
              'DC',20910,
              'NYC', 11104,
              NA, 11106,
              NA, 2008,
              NA, 60614)

# change the NAs to the appropriate values
df <- df %>%
  mutate(
    city = case_when(
      str_sub(zipcode, 1, 1) == '1' ~ 'NYC',
      str_sub(zipcode, 1, 1) == '2' ~ 'DC',
      str_sub(zipcode, 1, 1) == '6' ~ 'Chicago',
      TRUE ~ city
    )
  )

# convert everything to factors
df <- df %>%
  mutate(
    city = as.factor(city),
    zipcode = as.factor(zipcode)
  )

#preview the output
glimpse(df)
Observations: 6
Variables: 2
$ city    <fct> NYC, DC, NYC, NYC, DC, Chicago
$ zipcode <fct> 11211, 20910, 11104, 11106, 2008, 60614