【问题标题】:Why max(df$date) works but df %>% select(date) %>% max() gives Errors?为什么 max(df$date) 有效但 df %>% select(date) %>% max() 给出错误?
【发布时间】:2020-12-07 15:26:13
【问题描述】:

我正在处理包含日期字段作为字符的 covid 数据。

我试图找到 最大日期,我尝试使用 dplyr 的命令给我错误: df %>% select(date) %>% max()

Error in FUN(X[[i]], ...) : only defined on a data frame with all numeric variables

max(df$date) 运行完美并给了我结果:[1] "2020-08-17"

我无法理解为什么会这样。这是数据等的代码:

library(flexdashboard)
library(tidyverse)
library(lubridate)

数据

df <- read.csv("https://raw.githubusercontent.com/RamiKrispin/coronavirus/master/csv/coronavirus.csv", stringsAsFactors = F)

head(df)
dim(df)
df %>% distinct(country)
typeof(df$date)
df %>% select(date) %>% max()
df %>% max(date)
max(df$date)

【问题讨论】:

  • 试试:select(date) %&gt;% mutate(max(date))
  • 试试:pull(date) %&gt;% max(), pull 返回一个向量而不是像select这样的小标题
  • @Duck 但这给了我一列重复的最大日期值。我只需要从所有值中找到 1 个最大值,并且它应该可以在没有变异的情况下工作
  • 当你尝试这样做时,你会得到错误:Error in FUN(X[[i]], ...) : only defined on a data frame with all numeric variables。如果所有变量都是数字,那么您将在所有 data.frame 中获得最大值,而不是每一列。
  • 感谢@starja pull(date) %&gt;% max() 工作。但是,如果我正在处理数据框并选择一列,为什么它会变成一个小标题。使用 Python 中的 Pandas 后,我在这里发现了一些非常不同的风格,我想我需要一些时间来习惯这里的 pull() 命令

标签: r dataframe date tidyverse


【解决方案1】:

我认为这是因为当您使用 select 时仍然有一个数据框对象。如果您想使用 dplyr 进行子集化,因此您只有带有日期变量的向量(就像使用 df$date 时所做的那样),您可以使用 df %&gt;% pull(date) %&gt;% max()

【讨论】:

  • @"Josh C" 是的。我以后需要更加小心这个pull 声明。
猜你喜欢
  • 1970-01-01
  • 2021-10-03
  • 2019-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多