基于Region列处理DataFrame:!UK行处理与House列拆分需求
基于Region列处理DataFrame的两项操作(R tidyverse实现)
需求说明
- 当
Region列值为!UK且House列存在非空文本时,新增一行,新行的House列复制原行的文本内容,其余列保持与原行一致 - 将
House列中以分号(;)分隔的文本拆分为多行,每行对应一个拆分后的子文本
完整实现代码
library(tidyverse) # 示例数据 df <- tibble( Region = c("AU","USA","CA","USA","!UK","AU","USA","CA","!UK"), lock = c(1,1,NA,1,NA,1,NA,1,NA), type= c("sale",NA,NA,"target","target",NA,"sale",NA,"target"), House =c("Tagore house","Gandhi house",NA,"Flexible;Tagore house;Gandhi house","Tagore house",NA,"Flexible;Gandhi house","Gandhi house","Gandhi house") ) # 处理逻辑整合 df_processed <- df %>% # 标记需要新增行的条目:!UK且House非空的行复制2次,其余行保留1次 mutate(duplicate = if_else(Region == "!UK" & !is.na(House), 2, 1)) %>% # 根据标记复制行,实现新增行效果 uncount(duplicate) %>% # 将House列的分号分隔内容拆分为多行 separate_longer_delim(House, delim = ";") %>% # 移除辅助标记列 select(-duplicate) # 查看处理结果 print(df_processed)
代码解释
标记与复制行:
- 通过
mutate创建duplicate列,给符合Region == "!UK" & !is.na(House)条件的行赋值为2,其余行赋值为1 uncount(duplicate)会根据该列的值复制对应数量的行,直接满足新增一行的需求
- 通过
拆分分号分隔内容:
separate_longer_delim(House, delim = ";")是tidyverse中专门用于将列内分隔文本拆分为多行的函数,拆分后其他列的内容会自动与拆分后的House内容一一对应
处理后结果示例
部分输出如下:
# A tibble: 17 × 4 Region lock type House <chr> <dbl> <chr> <chr> 1 AU 1 sale Tagore house 2 USA 1 NA Gandhi house 3 CA NA NA NA 4 USA 1 target Flexible 5 USA 1 target Tagore house 6 USA 1 target Gandhi house 7 !UK NA target Tagore house 8 !UK NA target Tagore house 9 AU 1 NA NA 10 USA NA sale Flexible ...
内容的提问来源于stack exchange,提问作者potro
相关产品推荐
相关产品推荐

