在R语言中重塑DataFrame:拆分单元格多值实现行展开
拆分数据框中分号分隔列的简便方法
哈哈,这种把分隔符分隔的列拆成多行的需求真的太常见了!完全不用复杂方案,R里有好几种超省心的方法,给你分享两个最常用的:
方法一:用tidyverse的separate_rows()(最直接)
这是专门为这种场景设计的函数,一步到位:
# 先加载tidyverse包(如果没装先运行install.packages("tidyverse")) library(tidyverse) # 直接拆分col2列,分号作为分隔符 result <- separate_rows(df, col2, sep = ";")
这个函数会自动把col2里用分号分隔的内容拆成单独的行,同时保留col1对应的取值,完全匹配你想要的结果!
方法二:用str_split() + unnest_longer()
如果你习惯处理列表列,也可以用这个组合:
library(tidyverse) result <- df %>% # 把col2拆成列表形式,每个元素是拆分后的字符向量 mutate(col2 = str_split(col2, ";")) %>% # 把列表列展开成多行 unnest_longer(col2)
这个方法灵活性更高,要是之后还需要对拆分后的列表做其他操作,用这个会更方便。
方法三:Base R 原生方法(不用额外装包)
要是不想加载第三方包,用Base R也能轻松实现:
# 先拆分col2列得到列表 split_col <- strsplit(df$col2, ";") # 生成结果数据框 result <- data.frame( col1 = rep(df$col1, sapply(split_col, length)), col2 = unlist(split_col) )
原理就是先拆分得到每个元素的长度,然后重复col1对应次数,再把拆分后的内容展开合并。
内容的提问来源于stack exchange,提问作者Mariam
相关产品推荐
相关产品推荐

