在我接手的现有项目中,我遇到了一个问题,当我将变量保存到表格或数据框中时,它们会自动转换为字符型数据类型,因为一些向量包含字符串"error",而其他向量则包含数字。不幸的是,当我创建一个表格时,后者也被转换为字符型数据。
我已经发现,当我创建一个数据框而不是一个表格时,只有包含文本的列才是字符型数据,其余的都是数值型数据。然而,我面临的问题是,有些向量包含的行数比其他向量多(有些只包含一个参数,而其他向量包含两个或三个)。
我的目标是,创建一个数据框,其中所有这些向量的值在同一行中。例如,出现了这种情况:
我不想要两行,但我想要的结果应该是:
我首先想到的是要做什么:
我已经发现,当我创建一个数据框而不是一个表格时,只有包含文本的列才是字符型数据,其余的都是数值型数据。然而,我面临的问题是,有些向量包含的行数比其他向量多(有些只包含一个参数,而其他向量包含两个或三个)。
我的目标是,创建一个数据框,其中所有这些向量的值在同一行中。例如,出现了这种情况:
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()所示的转置标量包含向量的值的行为会在创建data.frame时将x的元素转换为字符,然后转换为因子。
问题在于,我不想手动将多行向量应用于t(),而是更希望有一个选项可以自动执行此操作。目前我所做的是编写一个函数,该函数将变量名称列表作为输入,并单独对每个变量进行转置。由于我的向量列表相当长,并且我必须在代码中多次执行此操作,因此我不禁感到一定有更优雅的方法来完成这个任务 - 是否有?
newframe <- data.frame(t(c(x,y)),stringsAsFactors=FALSE)
将会得到class(newframe$X1)
=character
。 - RockScienceNA
,就像 @RockScience 所说的那样。 - smci