简体   繁体   English

在 R 中并排查看或显示列表

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

Is there a way to view lists side by side?有没有办法并排查看列表? I'm comparing two versions of the same dataset and would like to view a summary print out of the variables.我正在比较同一数据集的两个版本,并希望查看变量的摘要打印。 Ideally the ability to supply more than two datasets would be great and if there was extra variables that weren't in one of the datasets, these would be at the end of the output.理想情况下,提供两个以上数据集的能力会很好,如果有额外的变量不在其中一个数据集中,这些将在输出的末尾。

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

the outcome I want is the following where each variable is aligned so they can easily be compared as so:我想要的结果是每个变量都对齐的结果,因此它们可以很容易地进行比较:

$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  

The only similar question I could find is here which is quite old but the variables jump around in that solution so they dont align up which makes it difficult to compare if you have lots of variables.我能找到的唯一类似问题是here ,它很旧,但变量在该解决方案中跳跃,因此它们不会对齐,如果您有很多变量,则很难进行比较。

Is there already a function for doing something like this or any nice work around?是否已经有一个功能可以做这样的事情或任何好的解决方法? I was thinking something with purrr might do it.我在想一些带有purrr东西可能会做到。

thanks谢谢

Here is a tidyverse solution:这是一个tidyverse解决方案:

Your reprex:你的代表:

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"))

Creating a key to join dataframes:创建一个键来加入数据帧:

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

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

full_join to compare: full_join 比较:

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

this gets me close enough这让我足够接近

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