R транспонировать фрейм данных с логическими переменными - PullRequest
0 голосов
/ 25 февраля 2019

Я бы хотел транспонировать кадр данных, который содержит логические и числовые переменные в строке, без потери информации о типе данных (т. Е. Без значения ИСТИНА / ЛОЖЬ, равным 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

Моя последняя цель - отобразить кадр данных в блестящем виде с разборчивым шрифтом, чтобы изменить его, а затем сохранить в формате CSV.файл.Поскольку у меня есть фрейм данных со многими столбцами и только 2 строками, я хочу транспонировать данные для лучшей визуализации.Перед сохранением я переставляю их обратно.Что я могу сделать?Спасибо за помощь!

1 Ответ

0 голосов
/ 25 февраля 2019

Я обошёл проблему благодаря идее, выдвинутой Маркусом

Сначала я сохраняю типы данных в векторе

dat_type <- sapply(DF, class)

Затем я переставляю фрейм данных

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

Я изменяю его в «блестящий» с помощью rhandsontable, а затем переставляю его обратно перед сохранением

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

Я использую функцию, вдохновленную этим вопросом ( Назначение типов данных каждому столбцу фрейма данных в 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-файл.Возможно, есть более быстрые способы сделать это, но этот делает работу довольно прилично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...