【问题标题】:view or display lists side-by-side in R在 R 中并排查看或显示列表
【发布时间】:2020-03-09 13:53:41
【问题描述】:

有没有办法并排查看列表?我正在比较同一数据集的两个版本,并希望查看变量的摘要打印。理想情况下,提供两个以上数据集的能力会很好,如果有额外的变量不在其中一个数据集中,这些变量将位于输出的末尾。

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 可能会这样做。

谢谢

【问题讨论】:

  • 您应该能够通过正确的变量使用left_join 并使用select 来根据需要组织列。

标签: r list dataframe purrr


【解决方案1】:

这里是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)

【讨论】:

  • 谢谢,但这不是我想要的输出,如果你有数百个变量,你将拥有一个非常宽的数据集,垂直向下滚动更容易,因为你会阅读列表而不是移动水平
  • 您需要将这些打印到控制台,还是可以写入 Excel/文本/其他文件?
  • 我想两者都是,但如果你可以打印到控制台,我认为打印到其他东西应该很简单
  • 只回到这个!想通了,谢谢你把我指向full_join,见下文
【解决方案2】:

这让我足够接近

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    相关资源
    最近更新 更多