【问题标题】:R transpose dataframe with logical variablesR用逻辑变量转置数据帧
【发布时间】:2019-07-18 20:03:12
【问题描述】:

我想在不丢失数据类型信息的情况下转置一个连续具有逻辑和数字变量的数据帧(即不将 TRUE/FALSE 变为 1/0)

这是我的代码:

xx <- data.frame(
  v1 = 200,
  v2 = 2,
  v3 = FALSE
)

#   v1 v2    v3
# 200  2 FALSE

t(xx)

#   [,1]
#v1  200
#v2    2
#v3    0

相反,我想得到:

t(xx)

#   [,1]
#v1  200
#v2    2
#v3    FALSE

我的最终目标是使用 rhandsontable 以闪亮的方式显示数据框,以便对其进行修改,然后将其保存在 csv 文件中。由于我有一个包含许多列且只有 2 行的数据框,因此我想转置数据以获得更好的可视化效果。在保存之前,我再次将它们转回。 我能做些什么? 感谢您的帮助!

【问题讨论】:

  • “问题”是向量只能包含单一类型(数字或逻辑),而矩阵是具有维度属性的向量。示例:c(10, FALSE) 您会看到 R 将逻辑值强制转换为数字值。你的最终目标是什么?
  • 我必须使用 rhandsontable 以闪亮的方式显示数据。问题是我的真实数据框的列数是 19,而行只有 2,所以我想转置它以获得更好的可视化。
  • 您可以使用字符串t(t(sapply(xx, as.character)))
  • 我可以,但是如果有一种方法可以保存每列的类型,这样在编辑数据后我可以将它们转回,重新分配正确的数据类型并最终保存它们,那就太好了。

标签: r dataframe types transpose


【解决方案1】:

感谢markus给出的想法,我解决了这个问题

首先我将数据类型保存在一个向量中

dat_type <- sapply(DF, class)

然后我转置数据帧

xx <- as.data.frame(t(xx), stringsAsFactors = F)

我用 rhandsontable 对其进行了修改,然后在保存之前将其转回

xx <- as.data.frame(t(xx))

我使用受此问题 (Assign data types to each column of a data frame in R) 启发的函数为每一列设置正确的数据类型

data.type.assign <- function(xx, dat_type){
  for(col_ind in 1:ncol(xx)){
    switch (dat_type[col_ind],
            "numeric" = {xx[,col_ind] <- as.numeric(xx[,col_ind])},
            "character" = {xx[,col_ind] <- as.character(xx[,col_ind])},
            "logical" = {xx[,col_ind] <- as.logical(xx[,col_ind])},
            "integer" = {xx[,col_ind] <- as.integer(xx[,col_ind])}
    )
  }
  xx
}

这样称呼

xx <- data.type.assign(xx, dat_type)

仅此而已。现在我将其保存为 csv 文件。可能有更快的方法可以做到这一点,但这个方法做得相当不错。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 2011-01-04
    • 1970-01-01
    相关资源
    最近更新 更多