R语言无需将vector转为list,如何给data.frame追加为多列?
R语言将向量元素按单独列追加到数据框的实现方案
方案1:转置向量后拼接
无需转换为list,只需要通过t()函数将向量转置为1行3列的矩阵,再和原数据框拼接,维度匹配后不会触发循环复用规则:
column <- c(1, 2, 3) res <- cbind(data.frame("Test"), t(column))
输出结果和预期一致:
X.Test. X1 X2 X3 1 Test 1 2 3
你之前直接用cbind失效的原因是,R默认将原子向量识别为单列结构,和1行的数据框拼接时长度不匹配,就会触发短对象循环规则,把第一行的Test重复3次得到3行结果,转置成单行矩阵后维度匹配就不会出现这个问题。
方案2:直接构造单行矩阵传入
如果是从零构建数据框,可以直接把向量包装为单行矩阵传入data.frame函数,一步得到目标结构:
column <- c(1, 2, 3) res <- data.frame("Test", matrix(column, nrow = 1))
补充说明:你当前使用as.list的实现本身是符合R底层逻辑的规范写法,data.frame解析参数时,会将原子向量作为单列处理、将list的每个元素作为独立列处理,该写法可读性和性能都没有问题,完全可以在生产环境使用。
内容的提问来源于stack exchange,提问作者J. Mini
相关产品推荐
相关产品推荐

