如何用R(优先dplyr)提取单列州名到对应评级分组上方
R语言实现方案(优先使用dplyr生态)
需要配合使用tidyverse生态下的dplyr、tidyr、stringr三个常用包,代码如下:
首先加载依赖:
library(dplyr) library(tidyr) library(stringr)
核心处理代码:
df_result <- df %>% # 新增原始行号,保证处理后顺序不混乱 mutate(original_idx = row_number()) %>% # 拆分原字段为州名和评级,无法拆分的区域名、空值自动填充NA separate(Level, into = c("state", "rating"), sep = ": ", remove = FALSE, fill = "right") %>% # 标记每个州首次出现Good评级的行 group_by(state) %>% mutate(first_good_flag = rating == "Good" & row_number() == 1) %>% ungroup() %>% # 生成最终的行内容:首次Good行先插入州名、再放评级;普通评级行仅放评级;其余行保留原值 reframe( Level = case_when( first_good_flag ~ list(c(state, rating)), !is.na(rating) ~ list(rating), TRUE ~ list(Level) ), original_idx = original_idx ) %>% # 展开列表得到所有行 unnest(Level) %>% # 按原始顺序排序 arrange(original_idx) %>% # 仅保留需要的结果列 select(Level)
结果验证:
运行以下代码可确认输出和预期完全一致:
all.equal(df_result, df_desired) # 返回 TRUE 即代表结果符合要求
内容的提问来源于stack exchange,提问作者Natasha R.
相关产品推荐
相关产品推荐

