程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了DPLYR 中汇总的奇怪行为大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决DPLYR 中汇总的奇怪行为?

开发过程中遇到DPLYR 中汇总的奇怪行为的问题如何解决?下面主要结合日常开发的经验,给出你关于DPLYR 中汇总的奇怪行为的解决方法建议,希望对你解决DPLYR 中汇总的奇怪行为有所启发或帮助;

我有两张大表(~12k x 6),基于对儿童及其父母的调查。这些表在维度、类型/类上是相同的,并且以相同的方式处理为 R。经过一番争论(再次对孩子和父母做同样的事情)后,我运行以下代码:

更新:事实证明我的问题的根源是变量 C,它在 Children 数据集中只有值 0 和 1。将 summarisetable 一起使用时,有什么办法可以解决此错误?

Parents %>% 
  summarise(across(A,~ table(.X)),across(B,~table(.X)),across(C,across(D,across(E,~ table(.X)))

Children %>%  
  summarise(across(A,~ table(.X)))
@H_197_17@

对于 Parents,我得到以下输出(唯一值 D var (1,2,3),others (0,1,2) 的频率:

        A          B      C           D      E
1   11840      11835  11409       11363    519
2      35         42    436         473   4912
3       3          1     33          42   6447
@H_197_17@

对于 Children,我收到以下错误:

Error: Problem with `summarise()` input `..5`.
x input `..5` must be size 4 or 1,not 3.
ℹ An earlIEr column had size 4.
ℹ input `..5` is `(function (.cols = everything(),.fns = NulL,...,.names = NulL) ...`.
Run `rlang::last_error()` to see where the error occurred.
@H_197_17@

运行 rlang::last_error() 返回:

<error/dplyr_error>
Problem with `summarise()` input `..5`.
x input `..5` must be size 4 or 1,.names = NulL) ...`.
BACktrace:
Run `rlang::last_trace()` to see the full context.
@H_197_17@

运行 rlang::last_trace() 返回:

<error/dplyr_error>
Problem with `summarise()` input `..5`.
x input `..5` must be size 4 or 1,.names = NulL) ...`.
BACktrace:
     █
  1. ├─`%>%`(...)
  2. ├─dplyr::summarise(...)
  3. ├─dplyr:::summarise.data.frame(...)
  4. │ └─dplyr:::summarise_cols(.data,...)
  5. │   └─base::withCallingHandlers(...)
  6. ├─dplyr:::abort_glue(...)
  7. │ ├─rlang::exec(abort,class = class,!!!data)
  8. │ └─(function (message = NulL,class = NulL,trace = NulL,parent = NulL,...
  9. │   └─rlang:::signal_abort(cnd)
 10. │     └─base::signalCondition(cnd)
 11. └─(function (E) ...
@H_197_17@

有人知道会发生什么吗?

为了理智起见,以下是 str 摘要:

> str(Parents)
'data.frame':   11878 obs. of  6 variables:
 $ ID         : chr  "Parent 1" "Parent 2" "Parent 3" "Parent 4" ...
 $ A          : num  0 0 0 0 0 0 0 0 0 0 ...
 $ B          : num  0 0 0 0 0 0 0 0 0 0 ...
 $ C          : num  0 0 0 0 0 0 0 0 0 0 ...
 $ D          : num  2 2 1 2 3 3 2 3 3 2 ...
 $ E          : num  0 0 0 0 0 0 0 0 0 0 ...
> str(Children)
'data.frame':   11878 obs. of  6 variables:
 $ ID         : chr  "Child 1" "Child 2" "Child 3" "Child 4" ...
 $ A          : num  0 0 0 0 0 0 0 0 0 0 ...
 $ B          : num  0 0 0 0 0 0 0 0 0 0 ...
 $ C          : num  0 0 0 0 0 0 0 0 0 0 ...
 $ D          : num  2 2 1 2 3 3 2 3 3 2 ...
 $ E          : num  0 0 0 0 0 0 0 0 0 0 ...
@H_197_17@ 

解决方法

table 不一定总是适合 tidyverse 管道,因为它返回的值数量不等。我认为以长格式获取数据并使用count会更好。您将获得相同的信息,但采用长格式。

library(dplyr)
library(tidyr)

Parents %>%  pivot_longer(cols = A:E) %>% count(name,value)
@H_197_17@

同样适用于 Children 数据。

@H_675_80@

大佬总结

以上是大佬教程为你收集整理的DPLYR 中汇总的奇怪行为全部内容,希望文章能够帮你解决DPLYR 中汇总的奇怪行为所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。