Показать длинную таблицу со скрытыми записями

Я хочу показать таблицу, которая может отображать n верхних записей и n нижних записей, если таблица очень длинная.

df <- nycflights13::flights

funct <- function(data, var){
    var_lab(data[[var]])<-"Table 1" 
    t1<- expss::cro_cpct(data[[var]])
    t1
}

funct(data=df,var="distance")
# I tried like below but still doesn't work

t1<- expss::cro_cpct(df[["distance"]]) %>% filter(row_number() <= 10 | row_number() >= (n() - 10)) %>%
    add_row(.after = 10) 
t2 <- t1 %>%   mutate(across(everything(), as.character))
t3 <- t2 %>%   mutate(across(everything(), ~replace_na(t2, "...")))

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

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
0
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Фильтр и add_row между верхним и нижним рядами:

df <- nycflights13::flights
df %>% 
  select(carrier, distance) %>% 
  arrange(desc(distance )) %>% 
  filter(row_number() <= 10 | row_number() >= (n() - 10)) %>% 
  mutate(across(everything(), as.character)) %>% 
  add_row(.after = 10, carrier = "...", distance = "...") %>% 
  writexl::write_xlsx(., "table.xlsx")

Если вам нужен стиль формата spss, вы можете сделать это с помощью пакета janitor вручную, например.

df %>% 
  janitor::tabyl(distance ) %>% 
  select(-n) %>% 
  arrange(desc(distance )) %>% 
  janitor::adorn_totals() %>% 
  janitor::adorn_pct_formatting() %>% 
  filter(row_number() <= 10 | row_number() >= (n() - 10)) %>% 
  add_row(.after = 10) %>% 
  as_tibble() %>% 
  mutate(across(everything(), as.character)) %>% 
  mutate(across(everything(), ~replace_na(.x, "...")))

на самом деле я хочу экспортировать его в xlsx в spss как таблицу, поэтому таблица kable будет работать там ...??

samrr_tr 23.04.2022 14:05

может тогда с пакетом writexl? я редактирую это

Julian 23.04.2022 14:11

как я могу применить это в своей функции...??? потому что я хочу, чтобы на выходе были таблицы, похожие на spss

samrr_tr 23.04.2022 14:49

Я думаю, вам нужно будет переписать его, см. мое редактирование.

Julian 23.04.2022 15:23

Я пробовал, как показано ниже, но он преобразовывал таблицу wole только в 2 строки: t1<- expss::cro_cpct(df[["distance"]]) %>% filter(row_number() <= 10 | row_number() >= (n() - 10)) %>% add_row(.after = 10) t2 <- t1 %>% mutate(через(все(), as.character)) t3 <- t2 %>% mutate(через(все (), ~replace_na(t2, "...")))

samrr_tr 23.04.2022 20:21

вы меня не так поняли, я подумал, что может быть проще написать таблицу самому и не полагаться на expss::cro_cpct

Julian 24.04.2022 09:39

на самом деле я полагаюсь на expss::cro_cpct, потому что все мои функции подготовлены только для пакета expss, вот причина. вывод требуется на основе баннера, который я не включил в свой воспроизводимый пример

samrr_tr 24.04.2022 09:53

тогда, возможно, используйте его до сих пор expss::cro_cpct(df[["distance"]]) %>% filter(row_number() <= 10 | row_number() >= (n() - 10)) %>% add_row(.after = 10) и заполните точки вручную.

Julian 24.04.2022 10:07

заполнить точки вручную, как ...??

samrr_tr 24.04.2022 10:32

expss::cro_cpct(df[["distance"]]) %>% filter(row_number() <= 10 | row_number() >= (n() - 10)) %>% add_row(.after = 10) до здесь работает отлично, но после этого не работает, он сжимает таблицу.

samrr_tr 24.04.2022 10:32
Ответ принят как подходящий

Не очень приятно, но работает для меня:

library(expss)
df <- nycflights13::flights

funct <- function(data, var){
    var_lab(data[[var]])<-"Table 1" 
    t1<- expss::cro_cpct(data[[var]])
    t1
}

res = funct(data=df,var="distance")


res = add_rows(
    head(res, 10),
    NA,
    
    tail(res, 10)
) 

# All row labels are located in the first column separated with '|'. 
# We need to replace the last label with '...'. 
# That's why we have this regular expression here.
res$row_labels[11] = gsub("\\|[^|]+$", "|...", res$row_labels[1]) 
# I don't recommend using the line below because it converts all numerics to characters. 
# It can complicate the further processing. 
# It's better to leave all columns except row_labels as is, e. g. filled with NA
res[11, -1] = '...'
res

# |         |              |               #Total |
# | ------- | ------------ | -------------------- |
# | Table 1 |           17 | 0.000296933273154857 |
# |         |           80 |    0.014549730384588 |
# |         |           94 |     0.28980687459914 |
# |         |           96 |    0.180238496804998 |
# |         |          116 |    0.131541440007601 |
# |         |          143 |    0.130353706914982 |
# |         |          160 |    0.111646910706226 |
# |         |          169 |    0.161828633869397 |
# |         |          173 |   0.0656222533672233 |
# |         |          184 |     1.63432073544433 |
# |         |          ... |                  ... |
# |         |         2475 |        3.34406252227 |
# |         |         2521 |   0.0843290495759793 |
# |         |         2565 |     1.52237689146495 |
# |         |         2569 |   0.0976910468679478 |
# |         |         2576 |   0.0926431812243153 |
# |         |         2586 |     2.43604057296244 |
# |         |         3370 |  0.00237546618523885 |
# |         |         4963 |    0.108380644701523 |
# |         |         4983 |    0.101551179418961 |
# |         | #Total cases |               336776 |

Да, это влияет на форматирование таблицы при экспорте в xlsx, любое решение или любую другую идею, как ее решить...??

samrr_tr 01.05.2022 14:17

@samrr_tr Я думаю, лучше всего не размещать «…» в числовых столбцах. Второй способ - округлять числа до усечения таблицы, но это тоже довольно хрупкий подход.

Gregory Demin 01.05.2022 15:05

Другие вопросы по теме