Как вы получаете структуру фрейма данных с ограниченной длиной для имен переменных? - PullRequest
1 голос
/ 24 октября 2019

У меня есть фрейм данных для набора необработанных данных, где имена переменных очень длинные. Я хотел бы отобразить структуру фрейма данных с помощью функции str и наложить ограничение на количество символов в отображаемых именах переменных, чтобы его было легче читать.

Вот воспроизводимый пример того, о чем я говорю.

#Data frame with long names
set.seed(1);
DATA <- data.frame(ID = 1:50,
                   Value = rnorm(50),
                   This_variable_has_a_really_long_and_annoying_name_to_illustrate_the_problem_of_a_data_frame_with_a_long_and_annoying_name = runif(50));

#Show structure of DATA
str(DATA);

> str(DATA)
'data.frame':   50 obs. of  3 variables:
 $ ID                                                                                                                       : int  1 2 3 4 5 6 7 8 9 10 ...
 $ Value                                                                                                                    : num  -0.626 0.184 -0.836 1.595 0.33 ...
 $ This_variable_has_a_really_long_and_annoying_name_to_illustrate_the_problem_of_a_data_frame_with_a_long_and_annoying_name: num  0.655 0.353 0.27 0.993 0.633 ...

Я хотел бы использовать функцию str, но наложить верхний предел на количество символовдля отображения в именах переменных, так что я получаю вывод, который похож на приведенный ниже. Я прочитал документацию , но не смог определить, есть ли возможность сделать это. (Кажется, есть варианты наложения верхних ограничений на длину строк в данных, но я не вижу возможности наложить ограничение на длину имени переменной.)

'data.frame':   50 obs. of  3 variables:
 $ ID                   : int  1 2 3 4 5 6 7 8 9 10 ...
 $ Value                : num  -0.626 0.184 -0.836 1.595 0.33 ...
 $ This_variable_has... : num  0.655 0.353 0.27 0.993 0.633 ...

Вопрос: Есть ли простой способ получить структуру фрейма данных, но наложить ограничение на длину имен переменных (чтобы получить что-то похожее на приведенное выше)?

1 Ответ

2 голосов
/ 24 октября 2019

Насколько я понимаю, вы правы, похоже, не существует встроенных средств для управления этим. Вы также не можете сделать это после факта, потому что str() ничего не возвращает. Таким образом, самый простой вариант - переименование заранее. Полагаясь на setNames(), вы можете создать простую функцию для выполнения этого:

short_str <- function(data, n = 20, ...) {
  name_vec <- names(data)
  str(setNames(data, ifelse(
    nchar(name_vec) > n, paste0(substring(name_vec, 1, n - 4), "... "), name_vec
  )), ...)
}

short_str(DATA)

'data.frame':   50 obs. of  3 variables:
 $ ID                   : int  1 2 3 4 5 6 7 8 9 10 ...
 $ Value                : num  -0.626 0.184 -0.836 1.595 0.33 ...
 $ This_variable_has... : num  0.655 0.353 0.27 0.993 0.633 ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...