【问题标题】:Turning a 1x1 data frame into value [duplicate]将 1x1 数据帧转换为值 [重复]
【发布时间】:2018-07-14 17:05:49
【问题描述】:

我正在使用dplyr 转换一个大型数据框,并且我想将 DF 的最近日期 + 1 存储为一个值。我知道通过分解语句可以更轻松地做到这一点,但我试图用一个管道语句来完成这一切。我遇到了一些事情,我不确定为什么 R 会默认这种方式。示例:

Day <- seq.Date(as.Date('2017-12-01'), as.Date('2018-02-03'), 'day')
Day <- sample(Day, length(Day))
ID <- sample(c(1:5), length(Day), replace = T)

df <- data.frame(ID, Day)

foo <- df %>% 
  arrange(desc(Day)) %>% 
  mutate(DayPlus = as.Date(Day) + 1) %>% 
  select(DayPlus) #%>% 
  #slice(1)

foo <- foo[1,1]

当我运行此代码时,foo 根据需要变为等于 2018-02-04 的值。但是,当我使用 slice 未注释运行代码时:

foo <- df %>% 
  arrange(desc(Day)) %>% 
  mutate(DayPlus = as.Date(Day) + 1) %>% 
  select(DayPlus) %>% 
  slice(1)

foo <- foo[1,1]

foo 保留为数据框。我的主要问题是为什么foo 在第二个示例中没有成为一个值,我的第二个问题是是否有一种简单的方法将“2018-02-04”作为存储为foo 的值全部来自一个@ 987654330@管道。

谢谢

【问题讨论】:

  • 也许您正在寻找pull。或者只是做max(df$Day) + 1
  • 我会查看pull 谢谢。是的,这在这种情况下肯定会起作用,但是在我的实际代码中到达当前的Day/ID 表之前,我必须做很多 df 操作,我宁愿在一个语句中完成所有操作。
  • &lt;the-long-pipe&gt; %&gt;% summarise(max(Day) + 1) %&gt;% pull()
  • 有谁知道为什么这被标记为重复?两个引用的问题都没有解决从 1x1 数据帧/小标题中提取标量的问题;他们都是关于将列提取为向量。也许对 R 奇怪的打字系统有更好的理解会让它更明显,但对于像我这样的 R 新手来说,没有明显的联系。

标签: r dplyr


【解决方案1】:

那是因为你的第一个 sn-p 返回一个 data.frame,第二个返回一个 tibbletibbles 类似于 data.frames,但一个主要区别是子集。如果您有data.framefoo[1, 1] 将第一列的第一行作为向量返回,而如果您有tibble,它将第一列的第一行作为tibble 返回。

df %>% 
  arrange(desc(Day)) %>% 
  mutate(DayPlus = as.Date(Day) + 1) %>% 
  select(DayPlus) %>%
  class()

返回

[1] "data.frame"

第二个

df %>% 
  arrange(desc(Day)) %>% 
  mutate(DayPlus = as.Date(Day) + 1) %>% 
  select(DayPlus) %>% 
  slice(1) %>%
  class()

返回

[1] "tbl_df"     "tbl"        "data.frame"

【讨论】:

    猜你喜欢
    • 2021-11-16
    • 2019-01-16
    • 2018-08-19
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 2015-08-11
    相关资源
    最近更新 更多