如果一列中的值以…开头,则用给定文本替换另一列,在R中
我试图构建一个if函数,允许我用特定城市名称对数据帧的“city”列进行更改,如果在“zipcode”列中,值以某个数字开头 例如:如果zipcode以1开头,则将city列值改为“NYC”, 否则,如果zipcode以6开头,则将city列值改为“Chicago”, 否则,如果zipcode以2开头,则将city列值改为“Boston” 等等 发件人:如果一列中的值以…开头,则用给定文本替换另一列,在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
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