You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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)

代码解释

  1. 标记与复制行:

    • 通过mutate创建duplicate列,给符合Region == "!UK" & !is.na(House)条件的行赋值为2,其余行赋值为1
    • uncount(duplicate)会根据该列的值复制对应数量的行,直接满足新增一行的需求
  2. 拆分分号分隔内容:

    • 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 16:52:34