R语言使用tidyr::separate拆分含可变数量/分隔符的列
解决方法
你只需要为tidyr::separate()补充对应配置即可实现需求,核心是用fill参数处理分隔后元素数量不足的场景:
into参数传入的列名需要为字符串格式- 配置
fill = "right":当路径拆分后的元素数量少于指定列数时,在右侧空缺位置自动填充NA - 可选配置
extra = "drop":当路径拆分后的元素数量超过指定列数时,自动丢弃多余内容避免告警
可运行示例代码
# 加载依赖包 library(tidyr) # 构造示例数据 df <- data.frame( group = c("a", "b", "c"), var1 = c(3, 1, 2), id = c( "C:/Users/me/big_folder/little_folder/plot/783/abc/551/statistics.csv", "C:/Users/me/big_folder/little_folder/plot/rep/634/efg/552/statistics.csv", "C:/Users/me/big_folder/228/hij/553/statistics.csv" ) ) # 按/拆分id列,空缺位置自动补NA split_result <- separate( data = df, col = id, sep = "/", into = paste0("dir_level_", 1:10), # 可自定义列名,需用字符串格式 fill = "right", extra = "drop" )
自动适配最大层级的写法
如果你不确定路径的最大层级,可先计算后自动生成对应数量的列,无需手动统计:
# 计算所有路径的最大拆分层级 max_dir_level <- max(lengths(strsplit(df$id, "/"))) # 自动生成对应列数的拆分结果 split_result_auto <- separate( data = df, col = id, sep = "/", into = paste0("dir_level_", 1:max_dir_level), fill = "right" )
内容的提问来源于stack exchange,提问作者Nazer
相关产品推荐
相关产品推荐

