r - 将任意数量的向量转换为数据帧,同时保留数据类型并将向量名称用作 R 中的列名
问题描述
是否有一个简单的函数(最好是用户编写的,或者在基础 R 中找到),它接受任意数量的向量,并生成一个数据框,保留向量的数据类型,并使用向量变量的名称作为列名?
一个例子
输入(向量)
> var_a # character
[1] "a" "b" "c"
> var_b # numeric
[1] 1 3 4
> var_c # factor
[1] red black black
Levels: black red
期望的输出
var_a var_b var_c
1 a 1 red
2 b 3 black
3 c 4 black
课程在哪里
sapply(my_dataframe, class)
# var_a var_b var_c
#"character" "numeric" "factor"
尝试 1 - 使用cbind
使用cbind
将产生一个矩阵(具有单一数据类型) - 因此此方法不维护向量的原始数据类型(它将所有列更改为字符)
first_method <- cbind(var_a, var_b, var_c)
尝试 2 - 使用do.call
(类似于此处)
在这种情况下,数据类型会丢失,向量变量的名称也会丢失
ls <- list(var_a, var_b, var_c)
second_method <- data.frame(do.call(cbind, ls))
second_method %>% sapply(class)
# X1 X2 X3
# "factor" "factor" "factor"
尝试 3 - 使用data.frame
此方法很接近(它将向量名称保留为数据框中的列名称),但不幸的是,它将字符数据类型转换为因子
third_method <- data.frame(var_a, var_b, var_c)
third_method %>% sapply(class)
# var_a var_b var_c
# "factor" "numeric" "factor"
尝试 4 - 手动声明数据框的每一列及其名称和数据类型
这将返回所需的输出,但是,它并不雄辩,而是对大量向量进行大量手动编码,并且容易出现用户错误,因为用户必须为每一列手动指定数据类型
fourth_method <- data.frame("var_a"=as.character(var_a), "var_b"=as.numeric(var_b), "var_c"=as.factor(var_c), stringsAsFactors = FALSE)
fourth_method %>% sapply(class)
# var_a var_b var_c
#"character" "numeric" "factor"
注意:this、this和this解决方案不合适,因为它们会导致数据类型丢失
另请注意:此问题中的向量不是此问题中提到的命名向量
在这一点上,我的想法不足,不确定下一步该尝试什么?
解决方案
这适用于data.frame
. 您只需要添加参数,stringsAsFactors=FALSE
.
df = data.frame(var_a, var_b, var_c, stringsAsFactors = FALSE)
sapply(df, class)
var_a var_b var_c
"character" "numeric" "factor"
推荐阅读
- ios - 在phonegap中上传zip文件时出现构建错误ios
- javascript - 将 'this' (self) 引用传递给 DOM 的 ng-mouseover 事件不起作用。除了使用核心javascript事件之外,还有其他方法吗?
- java - 如何在 addTextChangeListener() 中包含空格?
- php - 将多维数组添加到其他多维数组的子数组中
- python - 带有扭曲和(tx)请求的文件的异步下载
- python - 是否可以使用 Google App Engine(没有 Google Compute Engine)通过 API 调用(使用 Python)将文件下载到 Google Cloud Storage
- floating-point - IEE754 舍入模式:如何计算误差?
- angular - Angular 4 - 获取产品和类别
- vuejs2 - 对于vue,为什么div的remove事件无效?
- asp.net-mvc - MVC-如何让我的内容页面添加额外的 ContentPlaceHolder?