是否有一个简单的函数(最好是用户编写的,或者是在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"
cbind
使用cbind
将产生一个矩阵(具有单个数据类型)-因此此方法不保留向量的原始数据类型(它将所有列更改为字符)
first_method <- cbind(var_a, var_b, var_c)
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"
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"
此返回所希望的输出,但是,它并不口若悬河,而不是采取一个大量的手工编码大量矢量的,并且是容易出现用户错误,因为用户必须指定的数据类型手动为每列
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"
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句