【问题标题】:Ifelse statement within R's summarize function: dplyrR 的汇总函数中的 ifelse 语句:dplyr
【发布时间】:2021-01-25 01:20:14
【问题描述】:

如果访问符合 R 中的条件,我正在尝试计算提供者进行的访问次数。在注释掉的短语中,我可以让每个提供者获得正确的总访问次数,但是当我尝试设置一个 if 语句,我让提供者重复多次,而不是正确的访问计数。

TeleHealth_Counts %>%
  group_by(TeleHealth_Counts$`Visit Provider`) %>%
  summarize(Video_Count = ifelse(`Type` ==  "Video Visit New", NA, sum(`Visit Count`, na.rm = TRUE)))
  #summarize(Tele_Count = sum(`Visit Count`, na.rm = TRUE))

我面临的另一个问题是,当我将此代码分配给一个变量以便我可以下载数据时,我收到一个错误:summarise() regrouping output by 'TeleHealth_Counts$Visit Provider'(覆盖.groups 参数)。如何克服此错误或下载我在控制台中看到的数据框?

我尝试使用以下代码将其分配给变量、Tele_Count 和数据框 df_phys。

physicians <- unique(TeleHealth_Counts$`Visit Provider`)
df_phys <-data.frame(physicians)

【问题讨论】:

  • .groups 是一个警告,而不是错误。虽然它可以被忽略(它不会中断/停止执行),但通过将.groups= 添加到您的摘要中更安全,就像建议的警告一样。有关详细信息,请参阅?summarize。至于重复的提供者......它可以是任何东西。如果您发布重现该问题的示例数据,我们可以提供帮助。 (见stackoverflow.com/q/5963269minimal reproducible examplestackoverflow.com/tags/r/info

标签: r if-statement dplyr group-by summarize


【解决方案1】:

Type == "Video Visit New" 创建一个长度与组中行数相同的向量,ifelse 返回与我们正在检查的条件相同长度的输出,因此它重复行。

尝试以下方法:

library(dplyr)

result <- TeleHealth_Counts %>%
  group_by(`Visit Provider`) %>%
  summarize(Video_Count = if(any(`Type` ==  "Video Visit New")) NA_real_ 
                          else sum(`Visit Count`, na.rm = TRUE))

您收到的消息是警告,而不是 safe to ignore 的错误,因为这是 dplyr 1.0.0 及以后的默认行为,除非您将警告静音。要创建上述数据框的 csv 文件,您可以使用 write.csv ,例如:

write.csv(result, 'result.csv', row.names = FALSE)

【讨论】:

  • RonakShah,你在你的流程中工作NA_real_ 吗?虽然许多(tidyverse)工具都可以区分,但我发现其他工具与lgl 列混淆,因为我所做的事情没有产生任何可总结的东西,所以NA 绝不是NA_real_ 的情况。跨度>
  • 我通常只使用NA(主要是因为我不记得使用NA_real_/NA_integer_),除非那些tidyverse功能“喊”。但我认为明确一点总是更好。
  • 即使他们不抱怨,我认为它在某种意义上也可能是“声明性的”,声明我认为我应该从中得到什么。因此需要purrrvapply(基本R)中的许多map_* typed 列表应用程序函数。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-30
  • 2021-11-30
  • 1970-01-01
  • 2014-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多