Hospital | Total cases with known outcome | Recovered | Died | ||||
---|---|---|---|---|---|---|---|
Total | % of cases | Median CT values | Total | % of cases | Median CT values | ||
St. Mark's Maternity Hospital (SMMH) | 325 | 126 | 38.8% | 22 | 199 | 61.2% | 22 |
Central Hospital | 358 | 165 | 46.1% | 22 | 193 | 53.9% | 22 |
Other | 685 | 290 | 42.3% | 21 | 395 | 57.7% | 22 |
Military Hospital | 708 | 309 | 43.6% | 22 | 399 | 56.4% | 21 |
Missing | 1,125 | 514 | 45.7% | 21 | 611 | 54.3% | 21 |
Port Hospital | 1,364 | 579 | 42.4% | 21 | 785 | 57.6% | 22 |
Total | 3,440 | 1,469 | 42.7% | 22 | 1,971 | 57.3% | 22 |
29 Sunum için tablolar
Bu sayfa, flextable paketi ile özet veri çerçevelerinin sunuma hazır tablolara nasıl dönüştürüleceğini göstermektedir. Bu tablolar powerpoint slaytlarına, HTML sayfalarına, PDF veya Word belgelerine vb. eklenebilir.
flextable’ı kullanmadan önce, özet tablosunu veri çerçevesi olarak oluşturmanız gerekmektedir. Tablolar, çapraz tablolar, özetler ve açıklayıcı istatistiklerin hesaplanması gibi [Tanımlayıcı tablolar] ve [Özetleme verileri] sayfalarındaki yöntemleri kullanabilirsiniz. Veri çerçevesine uygulanan flextable daha sonraki sunumlara uygulanabilir.
Tablo oluşturmak için kullanılabilecek birçok R paketi vardır - bu sayfada flextable’ı vurgulamak istedik. knitr paketini ve onun kable()
fonksiyonunu kullanan bir örnek [Temaslı takibi] sayfasında bulunabilir. Benzer şekilde, DT paketi [Shiny Gösterge Tabloları] sayfasında vurgulanmıştır. GT ve huxtable gibi diğerleri [Önerilen paketler] sayfasında bahsedilmiştir.
29.1 Hazırlık
Paketleri yükleme
flextable’ı kurun ve yükleyin. Bu el kitabında, paketi kuran ve kullanım için yükleyen pacman’dan p_load()
kullanacağız. R tabanından library()
içeren paketleri de yükleyebilirsiniz. R paketleri hakkında daha fazla bilgi için [R temelleri] sayfasına bakabilirsiniz.
::p_load(
pacman# içe/dışa aktar
rio, # dosya yolağı
here, # HTML tablosu oluştur
flextable, # tablolar için yardımcı fonksiyonlar
officer, # veri yönetimi, özetlemesi ve görselleştirilmesi tidyverse)
Verileri içe aktarma
Başlamak için, simüle edilmiş bir Ebola salgınından temizlenmiş vaka listesini içe aktarıyoruz. Takip etmek isterseniz, “temiz satır listesi” dosyasını indirmek için tıklayın. (.rds dosyası olarak). rio paketinden import()
fonksiyonuyla verileri içe aktarın (.xlsx, .csv, .rds gibi birçok dosya türünü işler - ayrıntılar için [İçe aktarma ve dışa aktarma] sayfasına bakın).
# satır listesini içe aktar
<- import("linelist_cleaned.rds") linelist
Çizgi listesinin ilk 50 satırı aşağıda görüntülenmektedir:
Tabloyu hazırlama
flextable kullanmaya başlamadan önce tablonuzu veri çerçevesine dönüştürmeniz gerekecektir. janitor ve dplyr gibi paketleri kullanarak bir veri çerçevesinin nasıl oluşturulacağını öğrenmek için [Tanımlayıcı tablolar] ve [Veri pivotlama] sayfalarına bakabilirsiniz. İçeriği, görüntülenmesini istediğiniz gibi satırlar ve sütunlar halinde düzenlemelisiniz. Ardından, veri çerçevesinin rengi, başlığı, yazı tipleri vb. ile görüntülemek için flextable’e geçirilecektir.
Aşağıda, [Tanımlayıcı tablolar] sayfasından, vaka satır listesi
örnek olarak kullanılmıştır. Hazırlanan tabloda toplamlar satırı ile hastaneye göre hasta sonuçları ve CT değerlerini özetlenmiştir.
<- linelist %>%
table
# Hastane sonuç grubu başına özet değerleri al
###############################################
group_by(hospital, outcome) %>% # Grup verisi
summarise( # İlgilenilen göstergelerin yeni özet sütunları oluştur
N = n(), # Hastane-sonuç grubu başına satır sayısı
ct_value = median(ct_blood, na.rm=T)) %>% # Grup başına medyan CT değeri
# Toplamları ekle
############
bind_rows( # Önceki tabloyu mini toplamlar tablosuyla birleştir
%>%
linelist filter(!is.na(outcome) & hospital != "Missing") %>%
group_by(outcome) %>% # Hastaneye göre değil, yalnızca sonuca göre gruplandır
summarise(
N = n(), # Tüm veri kümesi için satır sayısı
ct_value = median(ct_blood, na.rm=T))) %>% # Tüm veri seti için medyan CT değeri
# Geniş pivotlama ve format
########################
mutate(hospital = replace_na(hospital, "Total")) %>%
pivot_wider( # uzundan genişe pivotla
values_from = c(ct_value, N), # yeni değerler ct ve count sütunlarından alınır
names_from = outcome) %>% # yeni sütun adları sonuçlardan alınır
mutate( # yeni sütun ekle
N_Known = N_Death + N_Recover, # sonucu bilinen sayı
Pct_Death = scales::percent(N_Death / N_Known, 0.1), # ölen vakaların yüzdesi (1 ondalık basamağa kadar)
Pct_Recover = scales::percent(N_Recover / N_Known, 0.1)) %>% # iyileşen vakaların yüzdesi (1 ondalık basamağa kadar)
select( # Sütunları yeniden sırala
# Giriş sütunları
hospital, N_Known, # İyileşen vaka sütunları
N_Recover, Pct_Recover, ct_value_Recover, %>% # Ölen vaka sütunları
N_Death, Pct_Death, ct_value_Death) arrange(N_Known) # Satırları en düşükten en yükseğe doğru düzenle (Toplam satırı en altta)
# yazdır table
# A tibble: 7 × 8
# Groups: hospital [7]
hospital N_Known N_Recover Pct_Recover ct_value_Recover N_Death Pct_Death
<chr> <int> <int> <chr> <dbl> <int> <chr>
1 St. Mark's M… 325 126 38.8% 22 199 61.2%
2 Central Hosp… 358 165 46.1% 22 193 53.9%
3 Other 685 290 42.3% 21 395 57.7%
4 Military Hos… 708 309 43.6% 22 399 56.4%
5 Missing 1125 514 45.7% 21 611 54.3%
6 Port Hospital 1364 579 42.4% 21 785 57.6%
7 Total 3440 1469 42.7% 22 1971 57.3%
# ℹ 1 more variable: ct_value_Death <dbl>
29.2 Temel flextable
Flextable oluşturma
flextable nesnelerini oluşturmak ve yönetmek için, önce veri çerçevesini flextable()
fonksiyonundan geçirilir. Sonuç my_table
olarak kaydedilir.
<- flextable(table)
my_table my_table
hospital | N_Known | N_Recover | Pct_Recover | ct_value_Recover | N_Death | Pct_Death | ct_value_Death |
---|---|---|---|---|---|---|---|
St. Mark's Maternity Hospital (SMMH) | 325 | 126 | 38.8% | 22 | 199 | 61.2% | 22 |
Central Hospital | 358 | 165 | 46.1% | 22 | 193 | 53.9% | 22 |
Other | 685 | 290 | 42.3% | 21 | 395 | 57.7% | 22 |
Military Hospital | 708 | 309 | 43.6% | 22 | 399 | 56.4% | 21 |
Missing | 1,125 | 514 | 45.7% | 21 | 611 | 54.3% | 21 |
Port Hospital | 1,364 | 579 | 42.4% | 21 | 785 | 57.6% | 22 |
Total | 3,440 | 1,469 | 42.7% | 22 | 1,971 | 57.3% | 22 |
Bu yapıldıktan sonra, daha fazla flextable biçimlendirme fonksiyonları aracılığıyla my_table
nesnesi aşamalı olarak yönlendirilebilir.
Bu sayfada, anlaşılır olması için ara adımlarda tablo my_table
olarak kaydedilecek ve flextable fonksiyonları bit-bit eklenecektir. Kodun başından sonuna kadar tümünü tek bir yığın halinde yazılmış olarak görmek isterseniz, aşağıdaki Bütün kodlar bölümünü ziyaret edebilirsiniz.
flextable koduna ait her bir satırının genel sözdizimi aşağıdaki gibidir:
function(table, i = X, j = X, part = "X")
, burada:function
, sütun genişliklerini belirlemek içinwidth()
, arka plan renklerini ayarlamak içinbg()
, metnin merkeze/sağa/sola hizalı olup olmadığını ayarlamak içinalign()
gibi birçok farklı fonksiyondan biri olabilir.table =
veri çerçevesinin adıdır, ancak veri çerçevesi fonksiyona aktarılıyorsa belirtilmesine gerek yoktur.part =
fonksiyonun tablonun hangi bölümüne uygulandığını belirtir. Örneğin. “başlık”, “gövde” veya “tümü”.i =
fonksiyonun uygulanacağı satırı belirtir, buradaX
satır numarasıdır. Birden fazla satır varsa, ör. birinci ila üçüncü satırlar arasında şu şekilde yazılabilir:i = c(1:3)
. ‘Gövde’ seçiliyse, ilk satırın başlık bölümünün altından başladığını unutmayın.j =
fonksiyonun uygulanacağı sütununu belirtir, buradaX
sütun numarası veya adıdır. Birden çok sütun varsa, ör. beşinci ve altıncı, şu şekilde yazılabilir:j = c(5,6)
.
flextable biçimlendirme fonksiyonlarına ait tam listeyi burada bulabilir veya ?flextable
komutunu girerek belgeleri inceleyebilirsiniz.
Sütun genişliği
Her hücrede yalnızca bir metin satırı olacak şekilde tabloyu güzelce genişleten autofit()
fonksiyonunu kullanabiliriz. qflextable()
fonksiyonu, flextable()
ve autofit()
için uygun bir kısayoldur.
%>% autofit() my_table
hospital | N_Known | N_Recover | Pct_Recover | ct_value_Recover | N_Death | Pct_Death | ct_value_Death |
---|---|---|---|---|---|---|---|
St. Mark's Maternity Hospital (SMMH) | 325 | 126 | 38.8% | 22 | 199 | 61.2% | 22 |
Central Hospital | 358 | 165 | 46.1% | 22 | 193 | 53.9% | 22 |
Other | 685 | 290 | 42.3% | 21 | 395 | 57.7% | 22 |
Military Hospital | 708 | 309 | 43.6% | 22 | 399 | 56.4% | 21 |
Missing | 1,125 | 514 | 45.7% | 21 | 611 | 54.3% | 21 |
Port Hospital | 1,364 | 579 | 42.4% | 21 | 785 | 57.6% | 22 |
Total | 3,440 | 1,469 | 42.7% | 22 | 1,971 | 57.3% | 22 |
Ancak, özellikle hücreler içinde çok uzun değerler varsa, bu fonksiyon her zaman uygun olmayabilir, tablo sayfaya sığmayabilir.
Bunun yerine genişlikleri width()
fonksiyonu ile belirtebilir. Hangi genişlik değerini koyacağınızı bilmek biraz zaman alabilir. Aşağıdaki örnekte, sütun 1, 2, 4 ve 8 için farklı genişlikler belirlenmiştir.
<- my_table %>%
my_table width(j=1, width = 2.7) %>%
width(j=2, width = 1.5) %>%
width(j=c(4,5,7,8), width = 1)
my_table
hospital | N_Known | N_Recover | Pct_Recover | ct_value_Recover | N_Death | Pct_Death | ct_value_Death |
---|---|---|---|---|---|---|---|
St. Mark's Maternity Hospital (SMMH) | 325 | 126 | 38.8% | 22 | 199 | 61.2% | 22 |
Central Hospital | 358 | 165 | 46.1% | 22 | 193 | 53.9% | 22 |
Other | 685 | 290 | 42.3% | 21 | 395 | 57.7% | 22 |
Military Hospital | 708 | 309 | 43.6% | 22 | 399 | 56.4% | 21 |
Missing | 1,125 | 514 | 45.7% | 21 | 611 | 54.3% | 21 |
Port Hospital | 1,364 | 579 | 42.4% | 21 | 785 | 57.6% | 22 |
Total | 3,440 | 1,469 | 42.7% | 22 | 1,971 | 57.3% | 22 |
Sütun başlıkları
Tablo içeriklerinin daha kolay yorumlanması için daha net başlıklar istenir.
Bu tablo için, aynı alt grupları kapsayan sütunların birlikte gruplanabilmesi için ikinci bir başlık katmanı eklemek istiyoruz. Bu top = TRUE
argümanı ve add_header_row()
fonksiyonu ile yapılmaktadır. Daha sonra birleştirilecek sütunlar için ""
boş değer bırakılarak, her sütunun yeni adı values =
argümanıyla verilmektedir.
İkinci başlıktaki başlık adları ayrı bir set_header_labels()
komutuyla yeniden adlandırılır.
Son olarak, üst başlıktaki belirli sütun başlıklarını “birleştirmek” için, merge_at()
fonksiyonu kullanılır.
<- my_table %>%
my_table
add_header_row(
top = TRUE, # Yeni başlık, mevcut başlık satırının üstüne eklenir
values = c("Hospital", # Aşağıdaki her sütun için başlık değerleri
"Total cases with known outcome",
"Recovered", # Bu, bunun ve sonraki iki sütunun en üst düzey başlığı olacak
"",
"",
"Died", # Bu, bunun ve sonraki iki sütunun en üst düzey başlığı olacak
"", # "Öldü" ile birleştirileceği için boş bırak
"")) %>%
set_header_labels( # Orijinal başlık satırındaki sütunları yeniden adlandır
hospital = "",
N_Known = "",
N_Recover = "Total",
Pct_Recover = "% of cases",
ct_value_Recover = "Median CT values",
N_Death = "Total",
Pct_Death = "% of cases",
ct_value_Death = "Median CT values") %>%
merge_at(i = 1, j = 3:5, part = "header") %>% # Yeni başlık satırında 3 ile 5 arasındaki sütunları yatay olarak birleştir
merge_at(i = 1, j = 6:8, part = "header") # HYeni başlık satırında 6 ile 8 arasındaki sütunları yatay olarak birleştir
# print my_table
Hospital | Total cases with known outcome | Recovered | Died | ||||
---|---|---|---|---|---|---|---|
Total | % of cases | Median CT values | Total | % of cases | Median CT values | ||
St. Mark's Maternity Hospital (SMMH) | 325 | 126 | 38.8% | 22 | 199 | 61.2% | 22 |
Central Hospital | 358 | 165 | 46.1% | 22 | 193 | 53.9% | 22 |
Other | 685 | 290 | 42.3% | 21 | 395 | 57.7% | 22 |
Military Hospital | 708 | 309 | 43.6% | 22 | 399 | 56.4% | 21 |
Missing | 1,125 | 514 | 45.7% | 21 | 611 | 54.3% | 21 |
Port Hospital | 1,364 | 579 | 42.4% | 21 | 785 | 57.6% | 22 |
Total | 3,440 | 1,469 | 42.7% | 22 | 1,971 | 57.3% | 22 |
Kenarlıklar ve arka plan
Çeşitli flextable fonksiyonlarıyla kenarlıkları, iç çizgileri vb. ayarlayabilirsiniz. border_remove()
ile mevcut tüm sınırları kaldırarak başlamak genellikle daha kolaydır.
Ardından, tabloyu theme_box()
, theme_booktabs()
veya theme_alafoli()
öğelerine geçirerek varsayılan kenarlık temalarını uygulayabilirsiniz.
Çeşitli fonksiyonlara dikey ve yatay çizgiler ekleyebilirsiniz. hline()
ve vline()
sırasıyla belirli bir satıra veya sütuna satır ekler. Her birinin içinde “part =” öğesini “tümü”, “gövde” veya “başlık” olarak belirtmelisiniz. Dikey çizgiler için sütunu j =
ve yatay çizgiler için satırı i =
olarak belirtmelisiniz. vline_right()
, vline_left()
, hline_top()
ve hline_bottom()
gibi diğer işlevler yalnızca dış taraflara satır ekler.
Tüm bu fonksiyonlarda, çizgi stili border =
olarak belirtilmelidir ayrıca officer paketinden fp_border()
fonksiyonunu kullanan ayrı bir komutun çıktısı şeklinde olmalıdır. Bu fonksiyon, çizginin genişliğini ve rengini tanımlamanıza yardımcı olur. Bunu aşağıda gösterildiği gibi tablo komutlarının üzerinde tanımlayabilirsiniz.
# sınır çizgisi için stil tanımla
= officer::fp_border(color="black", width=1)
border_style
# tabloya sınır çizgileri ekle
<- my_table %>%
my_table
# Mevcut tüm sınırları kaldır
border_remove() %>%
# önceden belirlenmiş bir tema ayarıyla yatay çizgiler ekle
theme_booktabs() %>%
# İyileşen ve Ölen bölümleri ayırmak için dikey çizgiler ekleyin
vline(part = "all", j = 2, border = border_style) %>% # sütun 2'de
vline(part = "all", j = 5, border = border_style) # sütun 5'de
my_table
Hospital | Total cases with known outcome | Recovered | Died | ||||
---|---|---|---|---|---|---|---|
Total | % of cases | Median CT values | Total | % of cases | Median CT values | ||
St. Mark's Maternity Hospital (SMMH) | 325 | 126 | 38.8% | 22 | 199 | 61.2% | 22 |
Central Hospital | 358 | 165 | 46.1% | 22 | 193 | 53.9% | 22 |
Other | 685 | 290 | 42.3% | 21 | 395 | 57.7% | 22 |
Military Hospital | 708 | 309 | 43.6% | 22 | 399 | 56.4% | 21 |
Missing | 1,125 | 514 | 45.7% | 21 | 611 | 54.3% | 21 |
Port Hospital | 1,364 | 579 | 42.4% | 21 | 785 | 57.6% | 22 |
Total | 3,440 | 1,469 | 42.7% | 22 | 1,971 | 57.3% | 22 |
Yazı tipi ve hizalama
flextable’daki align()
fonksiyonunu kullanarak en soldaki sütun dışındaki tüm sütunlar hastane adlarıyla ortalayarak hizalanabilir.
<- my_table %>%
my_table ::align(align = "center", j = c(2:8), part = "all")
flextable my_table
Hospital | Total cases with known outcome | Recovered | Died | ||||
---|---|---|---|---|---|---|---|
Total | % of cases | Median CT values | Total | % of cases | Median CT values | ||
St. Mark's Maternity Hospital (SMMH) | 325 | 126 | 38.8% | 22 | 199 | 61.2% | 22 |
Central Hospital | 358 | 165 | 46.1% | 22 | 193 | 53.9% | 22 |
Other | 685 | 290 | 42.3% | 21 | 395 | 57.7% | 22 |
Military Hospital | 708 | 309 | 43.6% | 22 | 399 | 56.4% | 21 |
Missing | 1,125 | 514 | 45.7% | 21 | 611 | 54.3% | 21 |
Port Hospital | 1,364 | 579 | 42.4% | 21 | 785 | 57.6% | 22 |
Total | 3,440 | 1,469 | 42.7% | 22 | 1,971 | 57.3% | 22 |
Ek olarak, başlık yazı tipi boyutunu artırabilir ve ardından kalın olarak değiştirebilir. Toplam satırı da kalın olarak değiştirebilir.
<- my_table %>%
my_table fontsize(i = 1, size = 12, part = "header") %>% # başlığın font büyüklüğünü değiştir
bold(i = 1, bold = TRUE, part = "header") %>% # başlığın kalınlığını ayarla
bold(i = 7, bold = TRUE, part = "body") # toplam satırın kalınlığını ayarla (gövdenin 7. satırı)
my_table
Hospital | Total cases with known outcome | Recovered | Died | ||||
---|---|---|---|---|---|---|---|
Total | % of cases | Median CT values | Total | % of cases | Median CT values | ||
St. Mark's Maternity Hospital (SMMH) | 325 | 126 | 38.8% | 22 | 199 | 61.2% | 22 |
Central Hospital | 358 | 165 | 46.1% | 22 | 193 | 53.9% | 22 |
Other | 685 | 290 | 42.3% | 21 | 395 | 57.7% | 22 |
Military Hospital | 708 | 309 | 43.6% | 22 | 399 | 56.4% | 21 |
Missing | 1,125 | 514 | 45.7% | 21 | 611 | 54.3% | 21 |
Port Hospital | 1,364 | 579 | 42.4% | 21 | 785 | 57.6% | 22 |
Total | 3,440 | 1,469 | 42.7% | 22 | 1,971 | 57.3% | 22 |
colformat_num()
fonksiyonunu kullanarak orantı sütunlarının yalnızca bir ondalık basamak göstermesi sağlanabilir. Bunun, round()
fonksiyonuyla veri yönetimi aşamasında da yapılabileceğini unutmayın.
<- colformat_num(my_table, j = c(4,7), digits = 1)
my_table my_table
Hospital | Total cases with known outcome | Recovered | Died | ||||
---|---|---|---|---|---|---|---|
Total | % of cases | Median CT values | Total | % of cases | Median CT values | ||
St. Mark's Maternity Hospital (SMMH) | 325 | 126 | 38.8% | 22 | 199 | 61.2% | 22 |
Central Hospital | 358 | 165 | 46.1% | 22 | 193 | 53.9% | 22 |
Other | 685 | 290 | 42.3% | 21 | 395 | 57.7% | 22 |
Military Hospital | 708 | 309 | 43.6% | 22 | 399 | 56.4% | 21 |
Missing | 1,125 | 514 | 45.7% | 21 | 611 | 54.3% | 21 |
Port Hospital | 1,364 | 579 | 42.4% | 21 | 785 | 57.6% | 22 |
Total | 3,440 | 1,469 | 42.7% | 22 | 1,971 | 57.3% | 22 |
Hücreleri birleştirme
Başlık satırındaki hücreler yatay olarak birleştirilebileciği gibi, merge_at()
kullanılarak ve satırları (i
) ve sütunu (j
) belirtilerek hücreler dikey olarak da birleştirebilir. Burada daha fazla yer açmak için “Hastane” ve “Sonucu bilinen toplam vaka” değerleri dikey olarak birleştirilmektedir.
<- my_table %>%
my_table merge_at(i = 1:2, j = 1, part = "header") %>%
merge_at(i = 1:2, j = 2, part = "header")
my_table
Hospital | Total cases with known outcome | Recovered | Died | ||||
---|---|---|---|---|---|---|---|
Total | % of cases | Median CT values | Total | % of cases | Median CT values | ||
St. Mark's Maternity Hospital (SMMH) | 325 | 126 | 38.8% | 22 | 199 | 61.2% | 22 |
Central Hospital | 358 | 165 | 46.1% | 22 | 193 | 53.9% | 22 |
Other | 685 | 290 | 42.3% | 21 | 395 | 57.7% | 22 |
Military Hospital | 708 | 309 | 43.6% | 22 | 399 | 56.4% | 21 |
Missing | 1,125 | 514 | 45.7% | 21 | 611 | 54.3% | 21 |
Port Hospital | 1,364 | 579 | 42.4% | 21 | 785 | 57.6% | 22 |
Total | 3,440 | 1,469 | 42.7% | 22 | 1,971 | 57.3% | 22 |
Arka plan rengi
Tablonun içeriğini başlıklardan ayırt etmek için ek biçimlendirme eklemek istenebilir. Örneğin, arka plan rengini değiştirme. Bu örnekte tablo gövdesini gri olarak değiştirmekteyiz.
<- my_table %>%
my_table bg(part = "body", bg = "gray95")
my_table
Hospital | Total cases with known outcome | Recovered | Died | ||||
---|---|---|---|---|---|---|---|
Total | % of cases | Median CT values | Total | % of cases | Median CT values | ||
St. Mark's Maternity Hospital (SMMH) | 325 | 126 | 38.8% | 22 | 199 | 61.2% | 22 |
Central Hospital | 358 | 165 | 46.1% | 22 | 193 | 53.9% | 22 |
Other | 685 | 290 | 42.3% | 21 | 395 | 57.7% | 22 |
Military Hospital | 708 | 309 | 43.6% | 22 | 399 | 56.4% | 21 |
Missing | 1,125 | 514 | 45.7% | 21 | 611 | 54.3% | 21 |
Port Hospital | 1,364 | 579 | 42.4% | 21 | 785 | 57.6% | 22 |
Total | 3,440 | 1,469 | 42.7% | 22 | 1,971 | 57.3% | 22 |
29.3 Koşullu biçimlendirme
Belirli bir kuralı karşılayan bir sütundaki tüm değerler vurgulanabilir. Örneğin, vakaların %55’inden fazlasının öldüğü yer. Ölçütleri i =
veya j =
argümanına, önünde bir tilde ~
gelecek şekilde koyulması yeterlidir. Değerler görüntülenen başlığa değil, veri çerçevesindeki sütununa refere edilmelidir.
%>%
my_table bg(j = 7, i = ~ Pct_Death >= 55, part = "body", bg = "red")
Hospital | Total cases with known outcome | Recovered | Died | ||||
---|---|---|---|---|---|---|---|
Total | % of cases | Median CT values | Total | % of cases | Median CT values | ||
St. Mark's Maternity Hospital (SMMH) | 325 | 126 | 38.8% | 22 | 199 | 61.2% | 22 |
Central Hospital | 358 | 165 | 46.1% | 22 | 193 | 53.9% | 22 |
Other | 685 | 290 | 42.3% | 21 | 395 | 57.7% | 22 |
Military Hospital | 708 | 309 | 43.6% | 22 | 399 | 56.4% | 21 |
Missing | 1,125 | 514 | 45.7% | 21 | 611 | 54.3% | 21 |
Port Hospital | 1,364 | 579 | 42.4% | 21 | 785 | 57.6% | 22 |
Total | 3,440 | 1,469 | 42.7% | 22 | 1,971 | 57.3% | 22 |
Veya, ilgilenilen bir hastane gibi belirli bir kriteri karşılayan tüm satır vurgulanabilir. Ölçütlerin tüm sütunlara uygulanabilmesi için sütun (j
) argümanının kaldırılması yeterlidir.
%>%
my_table bg(., i= ~ hospital == "Military Hospital", part = "body", bg = "#91c293")
Hospital | Total cases with known outcome | Recovered | Died | ||||
---|---|---|---|---|---|---|---|
Total | % of cases | Median CT values | Total | % of cases | Median CT values | ||
St. Mark's Maternity Hospital (SMMH) | 325 | 126 | 38.8% | 22 | 199 | 61.2% | 22 |
Central Hospital | 358 | 165 | 46.1% | 22 | 193 | 53.9% | 22 |
Other | 685 | 290 | 42.3% | 21 | 395 | 57.7% | 22 |
Military Hospital | 708 | 309 | 43.6% | 22 | 399 | 56.4% | 21 |
Missing | 1,125 | 514 | 45.7% | 21 | 611 | 54.3% | 21 |
Port Hospital | 1,364 | 579 | 42.4% | 21 | 785 | 57.6% | 22 |
Total | 3,440 | 1,469 | 42.7% | 22 | 1,971 | 57.3% | 22 |
29.4 Bütün kodlar
Aşağıda, yukarıdaki bölümlerdeki bahsi geçen bütün kodlar paylaşılmaktadır.
= officer::fp_border(color="black", width=1)
border_style
::p_load(
pacman# içe/dışa aktar
rio, # dosya yolağı
here, # HTML tablosu oluştur
flextable, # tablolar için yardımcı fonksiyonlar
officer, # veri yönetimi, özetlemesi ve görselleştirilmesi
tidyverse)
<- linelist %>%
table
# Hastane sonuç grubu başına özet değerleri al
###############################################
group_by(hospital, outcome) %>% # Grup verisi
summarise( # İlgilenilen göstergelerin yeni özet sütunları oluştur
N = n(), # Hastane-sonuç grubu başına satır sayısı
ct_value = median(ct_blood, na.rm=T)) %>% # Grup başına medyan CT değeri
# Toplamları ekle
############
bind_rows( # Önceki tabloyu mini toplamlar tablosuyla birleştir
%>%
linelist filter(!is.na(outcome) & hospital != "Missing") %>%
group_by(outcome) %>% # Hastaneye göre değil, yalnızca sonuca göre gruplandır
summarise(
N = n(), # Tüm veri kümesi için satır sayısı
ct_value = median(ct_blood, na.rm=T))) %>% # Tüm veri seti için medyan CT değeri
# Geniş pivotlama ve format
########################
mutate(hospital = replace_na(hospital, "Total")) %>%
pivot_wider( # uzundan genişe pivotla
values_from = c(ct_value, N), # yeni değerler ct ve count sütunlarından alınır
names_from = outcome) %>% # yeni sütun adları sonuçlardan alınır
mutate( # yeni sütun ekle
N_Known = N_Death + N_Recover, # sonucu bilinen satırların sayısı
Pct_Death = scales::percent(N_Death / N_Known, 0.1), # ölen vakaların yüzdesi (1 ondalık basamağa kadar)
Pct_Recover = scales::percent(N_Recover / N_Known, 0.1)) %>% # iyileşen vakaların yüzdesi (1 ondalık basamağa kadar)
select( # Sütunları yeniden sırala
# Giriş sütunları
hospital, N_Known, # İyileşen vaka sütunları
N_Recover, Pct_Recover, ct_value_Recover, %>% # Ölen vaka sütunları
N_Death, Pct_Death, ct_value_Death) arrange(N_Known) %>% # Satırları en düşükten en yükseğe doğru düzenle (Toplam satırı en altta)
# formatlama
############
flextable() %>% # tablo yukarıdan aktarılır
add_header_row(
top = TRUE, # Yeni başlık, mevcut başlık satırının üstüne eklenir
values = c("Hospital", # Aşağıdaki her sütun için başlık değerleri
"Total cases with known outcome",
"Recovered", # Bu, bunun ve sonraki iki sütunun en üst düzey başlığı olacak
"",
"",
"Died", # Bu, bunun ve sonraki iki sütunun en üst düzey başlığı olacak
"", # "Öldü" ile birleştirileceği için boş bırak
"")) %>%
set_header_labels( # Orijinal başlık satırındaki sütunları yeniden adlandır
hospital = "",
N_Known = "",
N_Recover = "Total",
Pct_Recover = "% of cases",
ct_value_Recover = "Median CT values",
N_Death = "Total",
Pct_Death = "% of cases",
ct_value_Death = "Median CT values") %>%
merge_at(i = 1, j = 3:5, part = "header") %>% # Yeni başlık satırında 3 ile 5 arasındaki sütunları yatay olarak birleştir
merge_at(i = 1, j = 6:8, part = "header") %>%
border_remove() %>%
theme_booktabs() %>%
vline(part = "all", j = 2, border = border_style) %>% # at column 2
vline(part = "all", j = 5, border = border_style) %>% # at column 5
merge_at(i = 1:2, j = 1, part = "header") %>%
merge_at(i = 1:2, j = 2, part = "header") %>%
width(j=1, width = 2.7) %>%
width(j=2, width = 1.5) %>%
width(j=c(4,5,7,8), width = 1) %>%
::align(., align = "center", j = c(2:8), part = "all") %>%
flextablebg(., part = "body", bg = "gray95") %>%
bg(., j=c(1:8), i= ~ hospital == "Military Hospital", part = "body", bg = "#91c293") %>%
colformat_num(., j = c(4,7), digits = 1) %>%
bold(i = 1, bold = TRUE, part = "header") %>%
bold(i = 7, bold = TRUE, part = "body")
`summarise()` has grouped output by 'hospital'. You can override using the
`.groups` argument.
table
Hospital | Total cases with known outcome | Recovered | Died | ||||
---|---|---|---|---|---|---|---|
Total | % of cases | Median CT values | Total | % of cases | Median CT values | ||
St. Mark's Maternity Hospital (SMMH) | 325 | 126 | 38.8% | 22 | 199 | 61.2% | 22 |
Central Hospital | 358 | 165 | 46.1% | 22 | 193 | 53.9% | 22 |
Other | 685 | 290 | 42.3% | 21 | 395 | 57.7% | 22 |
Military Hospital | 708 | 309 | 43.6% | 22 | 399 | 56.4% | 21 |
Missing | 1,125 | 514 | 45.7% | 21 | 611 | 54.3% | 21 |
Port Hospital | 1,364 | 579 | 42.4% | 21 | 785 | 57.6% | 22 |
Total | 3,440 | 1,469 | 42.7% | 22 | 1,971 | 57.3% | 22 |
29.5 Tablonun kaydedilmesi
Tablonun nihai çıktınıza entegre edilmesinin farklı yolları vardır.
Tek bir tablonun kaydedilmesi
Tabloları Word, PowerPoint, HTML veya görüntü (PNG) dosyaları olarak dışa aktarabilirsiniz. Bunu yapmak için aşağıdaki fonksiyonlardan uygun olanı kullanın:
save_as_docx()
save_as_pptx()
save_as_image()
save_as_html()
Örnek olarak aşağıda tablo word belgesi olarak kaydedilmektedir. İlk argümanın sözdizimine dikkat edilirse - sadece **flextable* nesnesinin adı verilebilir, ör. my_table
veya aşağıda gösterildiği gibi bir “ad” da verilebilir (“my table”). Ad, Word’deki tablonun başlığı olarak görünecektir. Aşağıda ayrıca PNG olarak kaydetme kodu da paylaşılmıştır.
# Tablo başlığını 'my table' olarak düzenle
save_as_docx("my table" = my_table, path = "file.docx")
save_as_image(my_table, path = "file.png")
Bir flextable tablosunu resim olarak kaydetmek için webshot
veya webshot2
paketlerinin gerekli olduğunu unutmayın. Görüntüler şeffaf arka planla çıkartılabilir.
flextable çıktının ‘canlı’ bir sürümü belge biçiminde görüntülemek istenirse, print()
fonksiyonu kullanılabilir. preview =
argümanı için aşağıdakilerden birini belirtmek gerekmektedir. Belge, bilgisayarınızda tanımlanan yazılım programında “açılır” ancak kaydedilmez. Bu durum, tablonun bir sayfaya / slayda sığıp sığmadığını kontrol etmek için yararlı olabilir böylece onu başka bir belgeye hızlı bir şekilde kopyalayabilirsiniz. Bağımsız değişken önizlemesini “pptx” veya “docx” olarak ayarlayabilirsiniz.
print(my_table, preview = "docx") # Word örneği
print(my_table, preview = "pptx") # Powerpoint örneği
Tabloyu R markdown’da yazdırma
Tablo nesnesi otomatik olarak bir belgenize veya R markdown çıktısına entegre edilebilir. Bu, değişen verilerle tablonun güncellenebileceği ve böylece sayıların yenilenebileceği anlamına gelmektedir.
Bu el kitabının [R Markdown ile Raporlar] sayfasındaki ayrıntılara bakın.
29.6 Kaynaklar
Tam flextable kitabı İlgili Github sayfası
Tüm flextable fonksiyonlarının bir kılavuzu burada bulunabilir Örnek flextable tablolardan oluşan bir galeriye buradan erişilebilir