R按固定分隔符拆分字符向量生成两列数据框的简便实现方法问询
字符向量按分隔符拆分为两列数据框的实现方法
需求说明
所有字符向量值中均存在指定分隔符且仅出现一次,每个向量值拆分后正好得到一对值,最终需要输出两列的数据框。现有可用的实现方案,以下提供更简便的写法,优先推荐base R原生方法。
示例数据与原有参考实现:
test <- rep("a,b", 5) # 原实现方案 data.frame(t(do.call(cbind, strsplit(test, ",")))) #> X1 X2 #> 1 a b #> 2 a b #> 3 a b #> 4 a b #> 5 a b
更简便的实现方案
1. base R原生方法(最推荐)
直接调用read.table读取字符向量即可,一行代码完成,不需要手动处理拆分后的列表结构,原生支持列名设置、自动识别列类型,可读性极强:
# 基础写法 read.table(text = test, sep = ",") # 可直接自定义列名 read.table(text = test, sep = ",", col.names = c("第一列", "第二列"))
第二种base R简化写法,适合需要手动控制拆分逻辑的场景:
data.frame(matrix(unlist(strsplit(test, ",")), ncol = 2, byrow = TRUE))
2. 第三方包实现
tidyr方案
用separate函数拆分,代码逻辑可读性高,适合已经在使用tidyverse生态的场景:
library(tidyr) data.frame(val = test) %>% separate(val, into = c("col1", "col2"), sep = ",")
stringr方案
str_split_fixed直接返回指定列数的矩阵,转数据框即可,写法简洁:
library(stringr) data.frame(str_split_fixed(test, ",", n = 2))
内容的提问来源于stack exchange,提问作者tjebo
相关产品推荐
相关产品推荐

