r - 将向量列表转置为来自 data.frame

标签 r dataframe type-conversion

在我接手的一个现有项目中,我面临的问题是,将变量保存到表或数据框时,它们会自动转换为数据类型字符,因为某些向量由字符串“错误”组成,而其他人持有一个数字。不幸的是,当我创建表格时,后者也被转换为字符。

我发现当我创建一个 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() 应用于多行向量,而是可以选择自动执行此操作。我现在所做的是编写一个函数,该函数将变量名列表作为输入并单独转置它们中的每一个。由于我的向量列表很长,而且我必须在整个代码中多次执行此操作,我不禁觉得必须有一种更优雅的方法来执行此操作 - 有吗?

最佳答案

问题与 data.frame 无关,而只是您不能在同一个矢量对象中使用 numeric 类和 character 类对象。这不可能。

在您之前启动项目的人不应该使用字符串“错误”来指示丢失的数据。相反,您应该使用 NA :

x=c(1,2)
y=c("Error","Error")
c(x,y) # Here the result is coerced as character automatically by R. There is no way to avoid that.

相反,你应该使用
c(x,NA) # NA is accepted in a vector of numeric

注:您应该将 data.frame 视为一个向量列表,这些向量是 data.frame 的列。因此,如果您有 2 列,则每列都是一个独立的向量,因此每列可能有不同的类:
x <- c(1,2)
y <- c("Error","Error")
df=data.frame(x=x,y=y,stringsAsFactors=FALSE)
class(df$x)
class(df$y)

现在,如果您尝试转置 data.frame,当然新的列向量将变成 c(1,"Error") 和 c(2,"Error") ,它们将像我们之前看到的那样被强制转换为字符。
t(df)

关于r - 将向量列表转置为来自 data.frame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23238714/

相关文章:

R:制作2个子集向量,以便值在索引方面不同

r - 如何在打开前检查文件大小?

r - 在 R 中操作子矩阵

r - 在 R 中使用 case_when 调试创建的函数

python - 基于列数据计算从 Pandas DataFrame 中的另一行查找数据的最快方法?

c# - 你能限制泛型中 Type 的类型吗?

python - 将 pandas Dataframe 列映射到字典值

python - 如何在 Pandas 中用重复数据填充行?

javascript - 响应中的日期格式

java - 为什么这个正则表达式不匹配