如何在R中用dplyr的separate_rows函数按条件拆分数据框行
解决方案
你之前报错的原因是separate_rows是数据框级别的操作函数,它返回的是整个数据框,而mutate需要的是对列的元素级操作(返回向量/列表),所以不能在if_else里直接嵌套separate_rows。
用一行代码实现需求的核心思路是:先把需要拆分的行的name列转成列表格式(每个元素是拆分后的字符向量),不需要拆分的行保持单个元素的列表,再通过unnest展开列表成多行。具体代码如下:
library(tidyverse) df %>% mutate(name = if_else(grade == 12, str_split(name, ","), list(name))) %>% unnest(name)
代码说明
str_split(name, ","):对grade=12的行,把name按逗号拆分成字符向量,存储为列表元素list(name):对非grade=12的行,把单个name值包装成单元素列表,保证列类型统一unnest(name):将列表列展开,每个列表元素对应一行,非拆分的行则保持原样
示例验证
假设你的数据框是:
df <- tibble( grade = c(10, 12, 12, 11), name = c("Alice", "Bob,Charlie", "David", "Eve") )
运行代码后输出:
# A tibble: 5 × 2 grade name <dbl> <chr> 1 10 Alice 2 12 Bob 3 12 Charlie 4 12 David 5 11 Eve
内容的提问来源于stack exchange,提问作者Peter Chung
相关产品推荐
相关产品推荐

