如何用R语言将DataFrame的names列按空格拆分为两列?
R语言按空格拆分DataFrame指定列的方法
原始数据
dframe <- data.frame(id = c(1,2), names = c("google analytics","amazon shop"))
目标输出
dframe <- data.frame(id = c(1,2), names1 = c("google","amazon"), names2 = c("analytics","shop"))
下面提供几种常用的实现方法:
方法1:使用tidyverse包的separate函数
这是最简洁直观的方法,适合日常数据处理:
# 首次使用需先安装包 # install.packages("tidyverse") library(tidyverse) # 拆分列 dframe_split <- dframe %>% separate(col = names, into = c("names1", "names2"), sep = " ") # 查看结果 print(dframe_split)
col参数指定要拆分的目标列into参数定义拆分后的新列名称sep参数设置分隔符,这里直接用空格" "
方法2:基础R原生实现(无需额外包)
如果不想加载第三方包,用基础R工具即可完成:
# 拆分names列,将列表结果转为矩阵 split_result <- do.call(rbind, strsplit(as.character(dframe$names), " ")) # 给矩阵设置列名 colnames(split_result) <- c("names1", "names2") # 合并原id列与拆分后的列 dframe_split <- cbind(dframe["id"], split_result) # 查看结果 print(dframe_split)
- 注意先将
dframe$names转为字符型(data.frame默认存储为因子类型) do.call(rbind...)将列表格式的拆分结果转为矩阵,方便和原数据合并
方法3:使用data.table包的tstrsplit函数
适合处理超大型数据集,运行效率更高:
# 首次使用需先安装包 # install.packages("data.table") library(data.table) # 转换为data.table格式 dframe_dt <- as.data.table(dframe) # 拆分列并直接添加到原表 dframe_dt[, c("names1", "names2") := tstrsplit(names, " ")] # 可选操作:删除原names列 dframe_dt[, names := NULL] # 查看结果 print(dframe_dt)
内容的提问来源于stack exchange,提问作者Erik Brole
相关产品推荐
相关产品推荐

