R中如何拆分data.table的t_IDs列生成含IDs字段的多行新数据
R中data.table拆分空格分隔列转为多行的实现方法
你可以直接使用data.table原生语法实现需求,代码如下:
# 先加载data.table包,假设你的数据对象命名为dt library(data.table) result_dt <- dt[, .(IDs = unlist(strsplit(t_IDs, split = " "))), by = .(State, AgentID, t_IDs)]
代码说明
by参数指定需要保留的原数据列,拆分过程中这些列的值会对应复用strsplit(t_IDs, " ")会把t_IDs的每个值按空格拆分为向量unlist将拆分得到的列表转为向量,配合分组逻辑自动生成对应多行- 新生成的
IDs列就是拆分后的单个值,默认是字符类型,如果需要转为整数可以额外加一步转换:
result_dt[, IDs := as.integer(IDs)]
如果你的data.table版本在v1.12.0及以上,也可以用更简洁的tstrsplit写法:
result_dt <- dt[, c(.SD, .(IDs = tstrsplit(t_IDs, " "))), by = 1:nrow(dt)][, !"nrow"]
如果你习惯tidyverse语法,也可以用tidyr的separate_rows函数,对data.table对象同样兼容:
library(tidyr) result_dt <- separate_rows(dt, IDs = t_IDs, sep = " ")
内容的提问来源于stack exchange,提问作者Our
相关产品推荐
相关产品推荐

