簡體   English   中英

在 R 中並排查看或顯示列表

[英]view or display lists side-by-side in R

有沒有辦法並排查看列表? 我正在比較同一數據集的兩個版本,並希望查看變量的摘要打印。 理想情況下,提供兩個以上數據集的能力會很好,如果有額外的變量不在其中一個數據集中,這些將在輸出的末尾。

library(tidyverse)
library(janitor)
df1 <- data.frame(var1 = c("a", "b"),
                  var2 = c("A", "B"),
                  var3 = c("checking"))
df1
df2 <- data.frame(var1 = letters,
                  var2 = LETTERS,
                  var4 = c("testing"))
df2
ll <- lst(df1, df2)

compare_these_lists <- map(ll, ~dplyr::select_if(.x, is.factor) %>% map(., tabyl))
compare_these_lists

我想要的結果是每個變量都對齊的結果,因此它們可以很容易地進行比較:

$df1                   $df2
$df1$var1              $df2$var1
.x[[i]] n percent     .x[[i]] n    percent
a 1     0.5                 a 1 0.03846154
b 1     0.5                 b 1 0.03846154
                            c 1 0.03846154
                            d 1 0.03846154
                            e 1 0.03846154
                            f 1 0.03846154
                            g 1 0.03846154
                            h 1 0.03846154
                            i 1 0.03846154
                            j 1 0.03846154
                            k 1 0.03846154
                            l 1 0.03846154
                            m 1 0.03846154
                            n 1 0.03846154
                            o 1 0.03846154
                            p 1 0.03846154
                            q 1 0.03846154
                            r 1 0.03846154
                            s 1 0.03846154
                            t 1 0.03846154
                            u 1 0.03846154
                            v 1 0.03846154
                            w 1 0.03846154
                            x 1 0.03846154
                            y 1 0.03846154
                            z 1 0.03846154

$df1$var2               $df2$var2
.x[[i]] n percent     .x[[i]] n    percent
A 1     0.5                 A 1 0.03846154
B 1     0.5                 B 1 0.03846154
                            C 1 0.03846154
                            D 1 0.03846154
                            E 1 0.03846154
                            F 1 0.03846154
                            G 1 0.03846154
                            H 1 0.03846154
                            I 1 0.03846154
                            J 1 0.03846154
                            K 1 0.03846154
                            L 1 0.03846154
                            M 1 0.03846154
                            N 1 0.03846154
                            O 1 0.03846154
                            P 1 0.03846154
                            Q 1 0.03846154
                            R 1 0.03846154
                            S 1 0.03846154
                            T 1 0.03846154
                            U 1 0.03846154
                            V 1 0.03846154
                            W 1 0.03846154
                            X 1 0.03846154
                            Y 1 0.03846154
                            Z 1 0.03846154     

$df1$var3
.x[[i]] n percent
checking 2       1                

                        $df2$var4
                         .x[[i]] n percent
                      testing 26       1  

我能找到的唯一類似問題是here ,它很舊,但變量在該解決方案中跳躍,因此它們不會對齊,如果您有很多變量,則很難進行比較。

是否已經有一個功能可以做這樣的事情或任何好的解決方法? 我在想一些帶有purrr東西可能會做到。

謝謝

這是一個tidyverse解決方案:

你的代表:

library(tidyverse)
library(janitor)
df1 <- data.frame(var1 = c("a", "b"),
                  var2 = c("A", "B"),
                  var3 = c("checking"))
df1
df2 <- data.frame(var1 = letters,
                  var2 = LETTERS,
                  var4 = c("testing"))

創建一個鍵來加入數據幀:

df1 <- as_tibble(df1)
df1 <- df1 %>% rownames_to_column(var = "key")

df2 <- as_tibble(df2)
df2 <- df2 %>% rownames_to_column(var = "key")

full_join 比較:

df_compare <- full_join(df1, df2, by = "key")
print(df_compare)

這讓我足夠接近

library(tidyverse)
flatten(compare_these_lists) %>% 
  map( ~ .x %>%  mutate(id = row_number())) %>%   
  imap(~set_names(.x, ifelse(names(.x) != "id", paste(.y, names(.x), sep = "_"), names(.x)))) %>% 
  reduce(full_join, by = 'id') %>% 
  {map(set_names(c("var1", "var2", "var3", "var4")), function(.x) dplyr::select(., contains(.x)))}

# $var1
#    var1_.x[[i]].x var1_n.x var1_percent.x var1_.x[[i]].y var1_n.y var1_percent.y
# 1               a        1            0.5              a        1     0.03846154
# 2               b        1            0.5              b        1     0.03846154
# 3            <NA>       NA             NA              c        1     0.03846154
# 4            <NA>       NA             NA              d        1     0.03846154
# 5            <NA>       NA             NA              e        1     0.03846154
# 6            <NA>       NA             NA              f        1     0.03846154
# 7            <NA>       NA             NA              g        1     0.03846154
# 8            <NA>       NA             NA              h        1     0.03846154
# 9            <NA>       NA             NA              i        1     0.03846154
# 10           <NA>       NA             NA              j        1     0.03846154
# 11           <NA>       NA             NA              k        1     0.03846154
# 12           <NA>       NA             NA              l        1     0.03846154
# 13           <NA>       NA             NA              m        1     0.03846154
# 14           <NA>       NA             NA              n        1     0.03846154
# 15           <NA>       NA             NA              o        1     0.03846154
# 16           <NA>       NA             NA              p        1     0.03846154
# 17           <NA>       NA             NA              q        1     0.03846154
# 18           <NA>       NA             NA              r        1     0.03846154
# 19           <NA>       NA             NA              s        1     0.03846154
# 20           <NA>       NA             NA              t        1     0.03846154
# 21           <NA>       NA             NA              u        1     0.03846154
# 22           <NA>       NA             NA              v        1     0.03846154
# 23           <NA>       NA             NA              w        1     0.03846154
# 24           <NA>       NA             NA              x        1     0.03846154
# 25           <NA>       NA             NA              y        1     0.03846154
# 26           <NA>       NA             NA              z        1     0.03846154

# $var2
#    var2_.x[[i]].x var2_n.x var2_percent.x var2_.x[[i]].y var2_n.y var2_percent.y
# 1               A        1            0.5              A        1     0.03846154
# 2               B        1            0.5              B        1     0.03846154
# 3            <NA>       NA             NA              C        1     0.03846154
# 4            <NA>       NA             NA              D        1     0.03846154
# 5            <NA>       NA             NA              E        1     0.03846154
# 6            <NA>       NA             NA              F        1     0.03846154
# 7            <NA>       NA             NA              G        1     0.03846154
# 8            <NA>       NA             NA              H        1     0.03846154
# 9            <NA>       NA             NA              I        1     0.03846154
# 10           <NA>       NA             NA              J        1     0.03846154
# 11           <NA>       NA             NA              K        1     0.03846154
# 12           <NA>       NA             NA              L        1     0.03846154
# 13           <NA>       NA             NA              M        1     0.03846154
# 14           <NA>       NA             NA              N        1     0.03846154
# 15           <NA>       NA             NA              O        1     0.03846154
# 16           <NA>       NA             NA              P        1     0.03846154
# 17           <NA>       NA             NA              Q        1     0.03846154
# 18           <NA>       NA             NA              R        1     0.03846154
# 19           <NA>       NA             NA              S        1     0.03846154
# 20           <NA>       NA             NA              T        1     0.03846154
# 21           <NA>       NA             NA              U        1     0.03846154
# 22           <NA>       NA             NA              V        1     0.03846154
# 23           <NA>       NA             NA              W        1     0.03846154
# 24           <NA>       NA             NA              X        1     0.03846154
# 25           <NA>       NA             NA              Y        1     0.03846154
# 26           <NA>       NA             NA              Z        1     0.03846154

# $var3
#    var3_.x[[i]] var3_n var3_percent
# 1      checking      2            1
# 2          <NA>     NA           NA
# 3          <NA>     NA           NA
# 4          <NA>     NA           NA
# 5          <NA>     NA           NA
# 6          <NA>     NA           NA
# 7          <NA>     NA           NA
# 8          <NA>     NA           NA
# 9          <NA>     NA           NA
# 10         <NA>     NA           NA
# 11         <NA>     NA           NA
# 12         <NA>     NA           NA
# 13         <NA>     NA           NA
# 14         <NA>     NA           NA
# 15         <NA>     NA           NA
# 16         <NA>     NA           NA
# 17         <NA>     NA           NA
# 18         <NA>     NA           NA
# 19         <NA>     NA           NA
# 20         <NA>     NA           NA
# 21         <NA>     NA           NA
# 22         <NA>     NA           NA
# 23         <NA>     NA           NA
# 24         <NA>     NA           NA
# 25         <NA>     NA           NA
# 26         <NA>     NA           NA

# $var4
#    var4_.x[[i]] var4_n var4_percent
# 1       testing     26            1
# 2          <NA>     NA           NA
# 3          <NA>     NA           NA
# 4          <NA>     NA           NA
# 5          <NA>     NA           NA
# 6          <NA>     NA           NA
# 7          <NA>     NA           NA
# 8          <NA>     NA           NA
# 9          <NA>     NA           NA
# 10         <NA>     NA           NA
# 11         <NA>     NA           NA
# 12         <NA>     NA           NA
# 13         <NA>     NA           NA
# 14         <NA>     NA           NA
# 15         <NA>     NA           NA
# 16         <NA>     NA           NA
# 17         <NA>     NA           NA
# 18         <NA>     NA           NA
# 19         <NA>     NA           NA
# 20         <NA>     NA           NA
# 21         <NA>     NA           NA
# 22         <NA>     NA           NA
# 23         <NA>     NA           NA
# 24         <NA>     NA           NA
# 25         <NA>     NA           NA
# 26         <NA>     NA           NA

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM