如何在RStudio中基于Regione列创建Posizione新列
在R中基于Regione列创建Posizione新列的解决方案
方法1:使用dplyr的case_when()(推荐,可读性强)
如果你的数据框是df,可以通过dplyr包的case_when()函数快速实现规则映射,这是tidyverse生态中处理多条件分支的常用方式:
# 先加载dplyr包(未安装则先运行install.packages("dplyr")) library(dplyr) df <- df %>% mutate(Posizione = case_when( Regione %in% c("Lombardia", "Friuli-Venezia Giulia") ~ "Nord", Regione == "Lazio" ~ "Centro", Regione == "Sicilia" ~ "Sud", # 可选:处理未匹配的Regione值,比如设为NA或其他标识 TRUE ~ NA_character_ ))
方法2:使用base R的嵌套ifelse()
如果不想加载额外包,base R的ifelse()也能实现需求:
df$Posizione <- ifelse( df$Regione %in% c("Lombardia", "Friuli-Venezia Giulia"), "Nord", ifelse( df$Regione == "Lazio", "Centro", ifelse( df$Regione == "Sicilia", "Sud", NA_character_ # 处理未匹配值 ) ) )
方法3:使用因子映射
如果Regione的取值固定,也可以先将其转为因子,再通过levels映射:
# 定义映射规则 region_map <- c( "Lombardia" = "Nord", "Friuli-Venezia Giulia" = "Nord", "Lazio" = "Centro", "Sicilia" = "Sud" ) # 转换为因子并映射 df$Posizione <- as.character(factor(df$Regione, levels = names(region_map), labels = region_map)) # 未匹配的Regione值会自动转为NA
注意事项
- 确保
Regione列的文本与规则完全一致(大小写、空格、连字符都要匹配),若有不一致可先通过str_trim()或tolower()处理。 - 上述代码均加入了未匹配值的处理(设为NA),你可根据需求修改为其他值(比如"Altro")。
内容的提问来源于stack exchange,提问作者Cesare Spani
相关产品推荐
相关产品推荐

