【发布时间】:2014-06-07 22:57:29
【问题描述】:
在我接手的一个现有项目中,我面临一个问题,即当我将变量保存到表或数据框时,它们会自动转换为数据类型字符,因为一些向量由字符串 "错误”,而其他人则持有一个数字。不幸的是,后者在我创建表格时也会转换为字符。
我发现当我创建一个 data.frame 而不是一个表时,只有包含文本的列是字符,其余的保持数字。但是,我面临的问题是某些向量包含的行比其他向量多(少数只包含一个参数,其他两个或三个)。
我想要做的是从所有这些向量中创建一个 data.frame,并将向量的值放在一行中。例如,发生这种情况:
x <- 1
y <- c("Error","Error")
data.frame(x,y)
x y
1 1 Error
2 1 Error
我不想要两行,但我正在寻找的结果是:
x <- 1
y <- t(c("Error","Error"))
data.frame(x,y)
x X1 X2
1 1 Error Error
我想到的第一件事就是:
> x <- 1
> y <- c("Error", "Error")
> newframe <- data.frame(t(c(x,y)))
> class(newframe$X1)
[1] "factor"
但不幸的是,转置包含向量值的标量的行为,如 attributes() 所示,会导致 x 的元素在创建 data.frame 时转换为字符,然后转换为因子。
问题是,我不想手动将 t() 应用于多行向量,而是可以选择自动执行此操作。我现在所做的是编写一个函数,该函数将变量名称列表作为输入并单独转置每个变量。由于我的向量列表很长,而且我必须在整个代码中多次执行此操作,我不禁觉得必须有一种更优雅的方式来执行此操作 - 有吗?
【问题讨论】:
-
在你的最后一个例子中:
newframe <- data.frame(t(c(x,y)),stringsAsFactors=FALSE)会给你class(newframe$X1)=character -
使用
NA,就像@RockScience 说的那样。
标签: r dataframe type-conversion